/**
 * @module modules/cycler-button-sk
 * @description A button initialized with an array of numbers.
 * Every time it's clicked it emits an event with the next item
 * in the array, looping around indefinitely.
 *
 * @evt next-item: emitted when clicked. detail.item contains one of the numbers
 *        from the list.
 *
 * @example
 *    <cycler-button-sk .text=${'next'} .list=${[1, 2, 3]} @next-item=${(e: Event)=>{}}>
 *    </cycler-button-sk>
 */
import { define } from 'elements-sk/define';
import { html } from 'lit-html';
import { ElementSk } from '../../../infra-sk/modules/ElementSk';
import { NextItemEventDetail, NextItemEvent } from '../events';

export class CyclerButtonSk extends ElementSk {
  private static template = (ele: CyclerButtonSk) => html`<button @click=${ele._click}>${ele.text}</button>`;

  public text = '';

  public list: number[] = [];

  private _index = 0;

  constructor() 


  connectedCallback(): void {
    super.connectedCallback();
    this._render();
  }

  private _click() {
    this.dispatchEvent(
      new CustomEvent<NextItemEventDetail>(
        NextItemEvent, {
          detail: { item: this.list[this._index] },
          bubbles: true,
        },
      ),
    );
    this._index = (this._index + 1) % this.list.length;
  }
}

define('cycler-button-sk', CyclerButtonSk);

{
    super(CyclerButtonSk.template);
  }