importiere {VideoTrackKind} von './track-enums';
importiere Track von './track';
importiere merge von '../utils/merge-options';

/**
 * Eine Darstellung eines einzelnen `VideoTracks`.
 *
 * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack}
 * @erweitert Spur
 * /
class VideoTrack extends Track {

  /**
   * Erstellen Sie eine Instanz dieser Klasse.
   *
   * @param {Object} [options={}]
   *        Objekt der Optionsnamen und -werte
   *
   * @param {string} [options.kind='']
   *        Eine gültige {@link VideoTrack~Kind}
   *
   * @param {string} [options.id='vjs_track_' + Guid.newGUID()]
   *        Eine eindeutige ID für diesen AudioTrack.
   *
   * @param {string} [options.label='']
   *        Die Menübezeichnung für diesen Titel.
   *
   * @param {string} [options.language='']
   *        Ein gültiger zweistelliger Sprachcode.
   *
   * @param {boolean} [options.selected]
   *        Wenn dieser Titel derjenige ist, der gerade abgespielt wird.
   * /
  constructor(options = {}) {
    const settings = merge(options, {
      art: VideoTrackKind[options.kind] || ''
    });

    super(Einstellungen);

    let selected = false;

    /**
     * @Mitglied von VideoTrack
     * @member {boolean} selected
     *         Ob diese "Videospur" ausgewählt ist oder nicht. Bei dieser Einstellung wird
     *         feuert {@link VideoTrack#selectedchange}, wenn sich der Status von selected geändert hat.
     * @Instanz
     *
     * @fires VideoTrack#selectedchange
     * /
    Object.defineProperty(this, 'selected', {
      get() {
        ausgewählt zurückgeben;
      },
      set(newSelected) {
        // ein ungültiger oder unveränderter Wert
        if (typeof newSelected !== 'boolean' || newSelected === selected) {
          rückkehr;
        }
        selected = newSelected;

        /**
         * Ein Ereignis, das ausgelöst wird, wenn sich die Auswahl auf dieser Spur ändert. Dies ermöglicht
         * die VideoTrackList, die diesen Track enthält, um entsprechend zu handeln.
         *
         * > Anmerkung: Dies ist nicht Teil der Spezifikation! Einheimische Titel genügen
         *         dies intern ohne ein Ereignis.
         *
         * @event VideoTrack#selectedchange
         * @Typ {EventTarget~Event}
         * /
        this.trigger('selectedchange');
      }
    });

    // Wenn der Benutzer diese Spur auf "ausgewählt" setzt, dann
    // Ausgewählt auf diesen wahren Wert setzen sonst
    // wir behalten es falsch
    if (einstellungen.ausgewählt) {
      this.selected = settings.selected;
    }
  }
}

standard-VideoSpur exportieren;