/**
 * Demonstrate stacking with z-index.  Layers and controls
 * can be ordered with z-index, but controls always appear
 * above layers.
 */

import Control from '../../../../src/ol/control/Control.js';
import Layer from '../../../../src/ol/layer/Layer.js';
import Map from '../../../../src/ol/Map.js';
import SourceState from '../../../../src/ol/source/State.js';
import View from '../../../../src/ol/View.js';

class Element extends Layer {
  constructor(options, style) {
    super(options);

    const element = document.createElement('div');
    element.style.position = 'absolute';
    Object.assign(element.style, style);

    this.element = element;
  }

  getSourceState() {
    return SourceState.READY;
  }

  render() {
    return this.element;
  }
}

// elements for stacked controls
const element1 = document.createElement('div');
const style1 = element1.style;
style1.position = 'absolute';
style1.background = 'blue';
style1.width = '25%';
style1.height = '50%';
style1.zIndex = '1';

const element2 = document.createElement('div');
const style2 = element2.style;
style2.position = 'absolute';
style2.background = 'orange';
style2.width = '75%';
style2.height = '25%';
style2.zIndex = '-1';

new Map({
  target: 'map',
  layers: [
    new Element(
      {
        zIndex: 200,
      },
      {
        background: 'red',
        width: '50%',
        height: '100%',
      }
    ),
    new Element(
      {
        zIndex: -200,
      },
      {
        background: 'green',
        width: '100%',
        height: '50%',
      }
    ),
  ],
  controls: [
    new Control({
      element: element1,
    }),
    new Control({
      element: element2,
    }),
  ],
  view: new View({
    center: [0, 0],
    zoom: 0,
  }),
});

render();
