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

/**
 * Eine Darstellung eines einzelnen `AudioTracks`. Wenn er Teil einer {@link AudioTrackList} ist
 * es wird jeweils nur ein `AudioTrack` in der Liste aktiviert.
 *
 * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack}
 * @erweitert Spur
 * /
class AudioTrack extends Track {

  /**
   * Erstellen Sie eine Instanz dieser Klasse.
   *
   * @param {Object} [options={}]
   *        Objekt der Optionsnamen und -werte
   *
   * @param {AudioTrack~Kind} [options.kind='']
   *        Eine gültige Audiospurart
   *
   * @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.enabled]
   *        Wenn dieser Titel derjenige ist, der gerade abgespielt wird. Wenn dieser Titel Teil von
   *        eine {@link AudioTrackList}, wird nur ein {@link AudioTrack} aktiviert.
   * /
  constructor(options = {}) {
    const settings = merge(options, {
      art: AudioTrackKind[options.kind] || ''
    });

    super(Einstellungen);

    let enabled = false;

    /**
     * @Mitglied von AudioTrack
     * @member {boolean} enabled
     *         Ob dieser `AudioTrack` aktiviert ist oder nicht. Bei dieser Einstellung wird
     *         feuern {@link AudioTrack#enabledchange}, wenn der Status von enabled geändert wird.
     * @Instanz
     *
     * @fires VideoTrack#selectedchange
     * /
    Object.defineProperty(this, 'enabled', {
      get() {
        rückgabe aktiviert;
      },
      set(newEnabled) {
        // ein ungültiger oder unveränderter Wert
        if (typeof newEnabled !== 'boolean' || newEnabled === enabled) {
          rückkehr;
        }
        aktiviert = newEnabled;

        /**
         * Ein Ereignis, das ausgelöst wird, wenn sich die Aktivierung auf dieser Spur ändert. Dies ermöglicht
         * die AudioTrackList, 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 AudioTrack#enabledchange
         * @Typ {EventTarget~Event}
         * /
        this.trigger('enabledchange');
      }
    });

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

standard-AudioTrack exportieren;