/**
 * @Datei html-track-element.js
 * /

import EventTarget from '../event-target';
import TextTrack from '../tracks/text-track';

/**
 * @Mitglied von HTMLTrackElement
 * @typedef {HTMLTrackElement~ReadyState}
 * @enum {number}
 * /
const NONE = 0;
const LOADING = 1;
const LOADED = 2;
const ERROR = 3;

/**
 * Eine einzelne Spur, die im DOM dargestellt wird.
 *
 * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement}
 * @extends EventTarget
 * /
class HTMLTrackElement extends EventTarget {

  /**
   * Erstellen Sie eine Instanz dieser Klasse.
   *
   * @param {Object} options={}
   *        Objekt der Optionsnamen und -werte
   *
   * @param {Tech} options.tech
   *        Ein Verweis auf den Tech, dem dieses HTMLTrackElement gehört.
   *
   * @param {TextTrack~Kind} [options.kind='subtitles']
   *        Eine gültige Textspurart.
   *
   * @param {TextTrack~Mode} [options.mode='disabled']
   *        Ein gültiger Textspurmodus.
   *
   * @param {string} [options.id='vjs_track_' + Guid.newGUID()]
   *        Eine eindeutige ID für diesen TextTrack.
   *
   * @param {string} [options.label='']
   *        Die Menübezeichnung für diesen Titel.
   *
   * @param {string} [options.language='']
   *        Ein gültiger zweistelliger Sprachcode.
   *
   * @param {string} [options.srclang='']
   *        Ein gültiger zweistelliger Sprachcode. Eine alternative, aber depriorisierte
   *        version von `options.language`
   *
   * @param {string} [options.src]
   *        Eine Url zu TextTrack-Stichwörtern.
   *
   * @param {boolean} [options.default]
   *        Ob diese Spur standardmäßig ein- oder ausgeschaltet sein soll.
   * /
  constructor(options = {}) {
    super();

    let readyState;

    const track = new TextTrack(options);

    this.kind = track.kind;
    this.src = track.src;
    this.srclang = track.language;
    this.label = track.label;
    this.default = track.default;

    Object.defineProperties(this, {

      /**
       * @Mitglied von HTMLTrackElement
       * @member {HTMLTrackElement~ReadyState} readyState
       *         Der aktuelle Bereitschaftsstatus des Spurelements.
       * @Instanz
       * /
      readyState: {
        get() {
          return readyState;
        }
      },

      /**
       * @Mitglied von HTMLTrackElement
       * @member {TextTrack} track
       *         Das zugrunde liegende TextTrack-Objekt.
       * @Instanz
       *
       * /
      titel: {
        get() {
          rückweg;
        }
      }
    });

    readyState = NONE;

    /**
     * @listens TextTrack#loadeddata
     * @feuert HTMLTrackElement#laden
     * /
    track.addEventListener('loadeddata', () => {
      readyState = LOADED;

      this.trigger({
        typ: 'Last',
        ziel: dies
      });
    });
  }
}

HTMLTrackElement.prototype.allowedEvents_ = {
  laden: 'load'
};

HTMLTrackElement.NONE = NONE;
HTMLTrackElement.LOADING = LOADING;
HTMLTrackElement.LOADED = LOADED;
HTMLTrackElement.ERROR = ERROR;

standard HTMLTrackElement exportieren;