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

/**
 * Una representación de una sola `VideoTrack`.
 *
 * @ver [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack}
 * @extiende Pista
 * /
class VideoTrack extiende Pista {

  /**
   * Crear una instancia de esta clase.
   *
   * @param {Objeto} [opciones={}]
   * Objeto de nombres y valores de opciones
   *
   * @param {cadena} [opciones.tipo='']
   * Un {@link VideoTrack~Kind} 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.seleccionado]
   * Si esta pista es la que se está reproduciendo actualmente.
   * /
  constructor(opciones = {}) {
    configuración constante = fusionar (opciones, {
      amable: VideoTrackKind[opciones.tipo] || ''
    });

    super(configuraciones);

    dejar seleccionado = falso;

    /**
     * @memberofVideoTrack
     * @member {booleano} seleccionado
     * Si esta `VideoTrack` está seleccionada o no. Al configurar esto se
     * disparar {@link VideoTrack#selectedchange} si el estado de seleccionado cambió.
     * @instancia
     *
     * @fires VideoTrack#cambio seleccionado
     * /
    Object.defineProperty(esto, 'seleccionado', {
      conseguir() {
        volver seleccionado;
      },
      set(nuevoSeleccionado) {
        // un valor inválido o sin cambios
        if (typeof newSelected !== 'boolean' || newSelected === seleccionado) {
          devolver;
        }
        seleccionado = nuevoSeleccionado;

        /**
         * Un evento que se activa cuando se seleccionan cambios en esta pista. Esto permite
         * la VideoTrackList 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 VideoTrack#cambio seleccionado
         * @type {Objetivo del evento~Evento}
         * /
        this.trigger('cambio seleccionado');
      }
    });

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

exportar VideoTrack predeterminado;