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

/**
 * VlBreadcrumb
 * @class
 * @classdesc Gebruik de breadcrumb om de locatie van de huidige pagina binnen een navigatie hiƫrarchie te tonen
 *
 * @extends HTMLElement
 *
 * @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-breadcrumb/releases/latest|Release notes}
 * @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-breadcrumb/issues|Issues}
 * @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-breadcrumb.html|Demo}
 *
 */
export class VlBreadcrumb extends nativeVlElement(HTMLElement) {
  connectedCallback() {
    this._processStyle();
    this._processAriaLabel();
  }

  get _olElements() {
    return [...this.querySelectorAll('ol')];
  }

  get _liElements() {
    return this._olElements.flatMap((ol) => [...ol.querySelectorAll('li')]);
  }

  get _aElements() {
    return this._liElements.flatMap((li) => [...li.querySelectorAll('a')]);
  }

  get _separatorTemplate() {
    return this._template(`<span class="vl-breadcrumb__list__item__separator" aria-hidden="true"></span>`);
  }

  _processStyle() {
    this._addClasses();
    this._addSeparators();
  }

  _processAriaLabel() {
    if (!this.getAttribute('aria-label')) {
      this.setAttribute('aria-label', 'U bent hier: ');
    }
  }

  _addClasses() {
    this.classList.add('vl-breadcrumb');
    this._olElements.forEach((ol) => ol.classList.add('vl-breadcrumb__list'));
    this._liElements.forEach((li) => li.classList.add('vl-breadcrumb__list__item'));
    this._aElements.forEach((a) => a.classList.add('vl-breadcrumb__list__item__cta'));
  }

  _addSeparators() {
    this._liElements.slice(1, this._liElements.length).forEach((li) => li.prepend(this._separatorTemplate));
  }
}

define('vl-breadcrumb', VlBreadcrumb, {extends: 'nav'});