import {nativeVlElement, vlElement, define} from '/node_modules/vl-ui-core/dist/vl-core.js';

/**
 * VlProperties
 * @class
 * @classdesc De properties webcomponent vormt de container van een lijst van kenmerken van een onderwerp. Deze component wordt meestal gebruikt om informatie te tonen dat ingevuld werd in een formulier.
 *
 * @extends HTMLElement
 * @mixes vlElement
 *
 * @property {boolean} data-vl-full-width - Attribuut wordt gebruikt om de maximale breedte van het label te benutten.
 *
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/releases/latest|Release notes}
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/issues|Issues}
 * @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-properties.html|Demo}
 */
export class VlProperties extends vlElement(HTMLElement) {
  static get _observedClassAttributes() {
    return ['full-width'];
  }

  constructor() {
    super(`
      <style>
        @import '/src/style.css';
      </style>

      <div class="vl-properties">
        <slot></slot>
      </div>
    `);
  }

  connectedCallback() {
    this._setPropertiesTitle();
  }

  get _titles() {
    return this.querySelectorAll('h1,h2,h3,h4,h5,h6');
  }

  get _classPrefix() {
    return 'vl-properties--';
  }

  _setPropertiesTitle() {
    this._titles.forEach((title) => {
      title.classList.add('vl-properties__title');
    });
  }
}

/**
 * VlPropertiesColumn
 * @class
 * @classdesc De properties kolom webcomponent wordt gebruikt om lijsten van kenmerken van een onderwerp te verdelen in verschillende kolommen.
 *
 * @extends HTMLDivElement
 * @mixes nativeVlElement
 *
 * @property {boolean} data-vl-full - Attribuut wordt gebruikt om de kolom de volledige breedte te laten innemen.
 *
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/releases/latest|Release notes}
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/issues|Issues}
 * @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-properties.html|Demo}
 */
export class VlPropertiesColumn extends nativeVlElement(HTMLDivElement) {
  static get _observedClassAttributes() {
    return ['full'];
  }

  connectedCallback() {
    this.classList.add('vl-properties__column');
  }

  get _classPrefix() {
    return 'vl-properties__column--';
  }
}

/**
 * VlPropertiesList
 * @class
 * @classdesc De properties lijst webcomponent toont een lijst van kenmerken van een onderwerp.
 *
 * @extends HTMLDListElement
 * @mixes nativeVlElement
 *
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/releases/latest|Release notes}
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/issues|Issues}
 * @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-properties.html|Demo}
 */
export class VlPropertiesList extends nativeVlElement(HTMLDListElement) {
  connectedCallback() {
    this.classList.add('vl-properties__list');
  }
}

/**
 * VlPropertyTerm
 * @class
 * @classdesc De property kenmerk webcomponent toont de beschrijving van een onderwerp kenmerk.
 *
 * @extends HTMLElement
 * @mixes nativeVlElement
 *
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/releases/latest|Release notes}
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/issues|Issues}
 * @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-properties.html|Demo}
 */
export class VlPropertyTerm extends nativeVlElement(HTMLElement) {
  connectedCallback() {
    this.classList.add('vl-properties__label');
  }
}

/**
 * VlPropertyValue
 * @class
 * @classdesc De property waarde webcomponent toont de waarde van een onderwerp kenmerk.
 *
 * @extends HTMLElement
 * @mixes nativeVlElement
 *
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/releases/latest|Release notes}
 * @see {@link http://www.github.com/milieuinfo/webcomponent-vl-ui-properties/issues|Issues}
 * @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-properties.html|Demo}
 */
export class VlPropertyValue extends nativeVlElement(HTMLElement) {
  connectedCallback() {
    this.classList.add('vl-properties__data');
  }
}

define('vl-properties', VlProperties);
define('vl-properties-column', VlPropertiesColumn, {extends: 'div'});
define('vl-properties-list', VlPropertiesList, {extends: 'dl'});
define('vl-property-term', VlPropertyTerm, {extends: 'dt'});
define('vl-property-value', VlPropertyValue, {extends: 'dd'});