importar {AudioTrackKind} desde './track-enums';
importar Pista desde './pista';
importar combinación desde '../utils/merge-options';

/**
 * Una representación de una sola `AudioTrack`. Si es parte de una {@link AudioTrackList}
 * solo se habilitará una `Pista de audio` en la lista a la vez.
 *
 * @ver [Especificación]{@enlace https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack}
 * @extiende Pista
 * /
clase AudioTrack extiende Pista {

  /**
   * Crear una instancia de esta clase.
   *
   * @param {Objeto} [opciones={}]
   * Objeto de nombres y valores de opciones
   *
   * @param {AudioTrack~Tipo} [opciones.tipo='']
   * Un tipo de pista de audio válido
   *
   * @param {cadena} [opciones.id='vjs_track_' + Guid.nuevoGUID()]
   * Una identificación única para esta pista de audio.
   *
   * @param {cadena} [opciones.etiqueta='']
   * La etiqueta del menú para esta pista.
   *
   * @param {cadena} [opciones.idioma='']
   * Un código de idioma válido de dos caracteres.
   *
   * @param {booleano} [opciones.habilitadas]
   * Si esta pista es la que se está reproduciendo actualmente. Si esta pista es parte de
   * una {@link AudioTrackList}, solo se habilitará una {@link AudioTrack}.
   * /
  constructor(opciones = {}) {
    configuración constante = fusionar (opciones, {
      amable: AudioTrackKind[opciones.tipo] || ''
    });

    super(configuraciones);

    dejar habilitado = falso;

    /**
     * @miembro de la pista de audio
     * @member {booleano} habilitado
     * Si esta `AudioTrack` está habilitada o no. Al configurar esto se
     * disparar {@link AudioTrack#enabledchange} si se cambia el estado de habilitado.
     * @instancia
     *
     * @fires VideoTrack#cambio seleccionado
     * /
    Object.defineProperty(esto, 'habilitado', {
      conseguir() {
        retorno habilitado;
      },
      establecer (nuevo Habilitado) {
        // un valor inválido o sin cambios
        if (typeof newEnabled !== 'booleano' || newEnabled === habilitado) {
          devolver;
        }
        habilitado = nuevo Habilitado;

        /**
         * Un evento que se activa cuando se activan cambios en esta pista. Esto permite
         * la AudioTrackList que contiene esta pista para actuar en consecuencia.
         *
         * > Nota: ¡Esto no forma parte de la especificación! Las pistas nativas servirán
         * esto internamente sin un evento.
         *
         * @event AudioTrack#cambio habilitado
         * @type {Objetivo del evento~Evento}
         * /
        this.trigger('cambio habilitado');
      }
    });

    // si el usuario establece esta pista como seleccionada, entonces
    // establecer seleccionado a ese valor verdadero de lo contrario
    // lo mantenemos falso
    si (configuraciones. habilitado) {
      this.enabled = configuración.enabled;
    }
    esto.cargado_ = verdadero;
  }
}

exportar pista de audio predeterminada;