/**
 * @cargador de archivos.js
 * /
importar componente desde '../component.js';
importar tecnología desde './tech.js';
importar {toTitleCase} desde '../utils/string-cases.js';
importar mergeOptions desde '../utils/merge-options.js';

/**
 * El `MediaLoader` es el `Componente` que decide qué tecnología de reproducción cargar
 * cuando se inicializa un reproductor.
 *
 * Componente @extiende
 * /
clase MediaLoader extiende Componente {

  /**
   * Crear una instancia de esta clase.
   *
   * @param {Jugador} jugador
   * El `Jugador` al que esta clase debe adjuntarse.
   *
   * @param {Objeto} [opciones]
   * El almacén de clave/valor de las opciones del jugador.
   *
   * @param {Componente~ReadyCallback} [listo]
   * La función que se ejecuta cuando este componente está listo.
   * /
  constructor(jugador, opciones, listo) {
    // MediaLoader no tiene ningún elemento
    const options_ = mergeOptions({createEl: false}, options);

    super(jugador, opciones_, listo);

    // Si no hay fuentes cuando se inicializa el reproductor,
    // carga la primera tecnología de reproducción admitida.

    if (!opciones.opciones.jugador.fuentes || opciones.opciones.jugador.fuentes.longitud === 0) {
      for (sea i = 0, j = options.playerOptions.techOrder; i < j.longitud; i++) {
        const techName = toTitleCase(j[i]);
        let tech = Tech.getTech(techName);

        // Admite el comportamiento anterior de los técnicos que se registran como componentes.
        // Eliminar una vez que se elimine ese comportamiento obsoleto.
        if (!nombreTecnológico) {
          tech = Component.getComponent(techName);
        }

        // Comprobar si el navegador soporta esta tecnología
        si (tecnología && tech.isSupported()) {
          player.loadTech_(nombreTecnología);
          romper;
        }
      }
    } else {
      // Recorra las tecnologías de reproducción (p. ej., HTML5) y busque soporte.
      // Luego cargue la mejor fuente.
      // Algunas suposiciones aquí:
      // Todas las tecnologías de reproducción respetan la precarga false.
      player.src(opciones.playerOptions.sources);
    }
  }
}

Component.registerComponent('MediaLoader', MediaLoader);
exportar MediaLoader predeterminado;