/**
 * @archivo track.js
 * /
importar * como Guid desde '../utils/guid.js';
importar EventTarget desde '../event-target';

/**
 * Una clase de pista que contiene toda la funcionalidad común para {@link AudioTrack},
 * {@link VideoTrack} y {@link TextTrack}.
 *
 * > Nota: Esta clase no debe utilizarse directamente
 *
 * @ver {@enlace https://html.spec.whatwg.org/multipage/embedded-content.html}
 * @extiende EventTarget
 * @abstracto
 * /
clase Pista extiende EventTarget {

  /**
   * Crear una instancia de esta clase.
   *
   * @param {Objeto} [opciones={}]
   * Objeto de nombres y valores de opciones
   *
   * @param {cadena} [opciones.tipo='']
   * Un tipo válido para el tipo de pista que está creando.
   *
   * @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.
   *
   * @abstracto
   * /
  constructor(opciones = {}) {
    súper();

    const trackProps = {
      id: opciones.id || 'vjs_track_' + Guid.nuevoGUID(),
      tipo: opciones.tipo || '',
      idioma: opciones.idioma || ''
    };

    let etiqueta = opciones.etiqueta || '';

    /**
     * @memberof Pista
     * @miembro {cadena} id
     * El id de esta pista. No se puede cambiar después de la creación.
     * @instancia
     *
     * @solo lectura
     * /

    /**
     * @memberof Pista
     * @member {cadena} tipo
     * El tipo de pista que es esta. No se puede cambiar después de la creación.
     * @instancia
     *
     * @solo lectura
     * /

    /**
     * @memberof Pista
     * @member {cadena} idioma
     * El código de idioma de dos letras para esta pista. No se puede cambiar después
     * creación.
     * @instancia
     *
     * @solo lectura
     * /

    para (clave const en trackProps) {
      Object.defineProperty(esto, clave, {
        conseguir() {
          return trackProps[clave];
        },
        colocar() {}
      });
    }

    /**
     * @memberof Pista
     * etiqueta @member {cadena}
     * La etiqueta de esta pista. No se puede cambiar después de la creación.
     * @instancia
     *
     * @fires Track#labelchange
     * /
    Object.defineProperty(esto, 'etiqueta', {
      conseguir() {
        etiqueta de devolución;
      },
      establecer (nueva etiqueta) {
        if (nuevaEtiqueta !== etiqueta) {
          etiqueta = nuevaEtiqueta;

          /**
           * Un evento que se activa cuando cambia la etiqueta en esta pista.
           *
           * > Nota: ¡Esto no forma parte de la especificación!
           *
           * @event Pista#cambiodeetiqueta
           * @type {Objetivo del evento~Evento}
           * /
          this.trigger('cambio de etiqueta');
        }
      }
    });
  }
}

exportar pista predeterminada;