/**
 * @file video-track-list.js
 * /
importar TrackList desde './track-list';

/**
 * Anule la selección de todos los demás {@link VideoTrack} que estén seleccionados.
 *
 * lista @param {VideoTrackList}
 * lista para trabajar
 *
 * @param {VideoTrack} pista
 * La pista para saltar
 *
 * @privado
 * /
const deshabilitarOtros = función (lista, pista) {
  para (sea i = 0; i < lista.longitud; i++) {
    if (!Object.keys(list[i]).length || track.id === list[i].id) {
      continuar;
    }
    // otra pista de video está habilitada, deshabilítela
    lista[i].seleccionado = falso;
  }
};

/**
 * La lista actual de {@link VideoTrack} para un video.
 *
 * @ver [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}
 * @extiende TrackList
 * /
clase VideoTrackList extiende TrackList {

  /**
   * Crear una instancia de esta clase.
   *
   * @param {VideoTrack[]} [pistas=[]]
   * Una lista de `VideoTrack` para instanciar la lista.
   * /
  constructor(pistas = []) {
    // asegúrese de que solo 1 pista esté habilitada
    // ordenado del último índice al primer índice
    for (sea i = pistas.longitud - 1; i > = 0; i--) {
      if (pistas[i].seleccionado) {
        deshabilitarOtros(pistas, pistas[i]);
        romper;
      }
    }

    súper (pistas);
    esto.cambiando_ = falso;

    /**
     * @miembro {número} VideoTrackList#selectedIndex
     * El índice actual del {@link VideoTrack`} seleccionado.
     * /
    Object.defineProperty(this, 'selectedIndex', {
      conseguir() {
        para (sea i = 0; i < esta.longitud; i++) {
          si (este[i].seleccionado) {
            devolver yo;
          }
        }
        devolver -1;
      },
      colocar() {}
    });
  }

  /**
   * Agregue un {@link VideoTrack} a `VideoTrackList`.
   *
   * @param {VideoTrack} pista
   * El VideoTrack para agregar a la lista
   *
   * @fires TrackList#addtrack
   * /
  addTrack(pista) {
    if (pista.seleccionada) {
      deshabilitarOtros(esto, pista);
    }

    super.addTrack(pista);
    // las pistas nativas no tienen esto
    si (! track.addEventListener) {
      devolver;
    }

    track.selectedChange_ = () => {
      if (esto.cambiando_) {
        devolver;
      }
      esto.cambiando_ = verdadero;
      deshabilitarOtros(esto, pista);
      esto.cambiando_ = falso;
      this.trigger('cambiar');
    };

    /**
     * @escucha VideoTrack#selectedchange
     * @fires TrackList#cambiar
     * /
    track.addEventListener('cambioseleccionado', track.cambioseleccionado_);
  }

  removeTrack(rtrack) {
    super.removeTrack(rtrack);

    si (rtrack.removeEventListener && rtrack.selectedChange_) {
      rtrack.removeEventListener('cambioseleccionado', rtrack.cambioseleccionado_);
      rtrack.selectedChange_ = nulo;
    }
  }
}

exportar VideoTrackList predeterminado;