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

/**
 * VlProgressBarStep
 * @class
 * @classdesc Onderdeel van de progress-bar die een stap voorstelt van een proces dat uit verschillende stappen bestaat.
 *
 * @extends HTMLElement
 *
 * @property {boolean} data-vl-active - Attribuut wordt gebruikt om aan te geven dat de stap actief is.
 *
 * @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-progress-bar/releases/latest|Release notes}
 * @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-progress-bar/issues|Issues}
 * @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-progress-bar-step.html|Demo}
 *
 */
export class VlProgressBarStep extends vlElement(HTMLElement) {
  static get _buttonSelector() {
    return 'button.vl-progress-bar__bullet';
  }

  /**
     * Geeft de tekst van de progress bar stap.
     *
     * @return {string}
     */
  get text() {
    return this.innerText;
  }

  /**
     * Geeft terug of de progress bar stap actief is.
     *
     * @return {boolean}
     */
  get active() {
    return this.hasAttribute('data-vl-active');
  }

  get template() {
    const activeClass = this.active ? 'vl-progress-bar__step--active' : '';
    const ariaCurrent = this.active ? 'aria-current="step"' : '';
    return this._template(`
        <div class="vl-progress-bar__step ${activeClass}">
            <button class="vl-progress-bar__bullet" ${ariaCurrent} aria-label="${this.text}">
                <vl-tooltip placement="top">${this.text}</vl-tooltip>
                <span class="vl-u-visually-hidden">${this.text}</span>
            </button>
        </div>
    `);
  }

  /**
     * Bepaal of de progress bar stap actief is.
     *
     * @param {boolean} value
     */
  set active(value) {
    this.toggleAttribute('data-vl-active', value);
  }
}

define('vl-progress-bar-step', VlProgressBarStep);