/**
 * @file loader.js
 */
import Component from '../component.js' ;
import Tech from './tech.js' ;
import {toTitleCase} de '../utils/string-cases.js' ;
import mergeOptions from '../utils/merge-options.js' ;

/**
 * Le `MediaLoader` est le `Composant` qui décide de la technologie de lecture à charger
 * lors de l'initialisation d'un lecteur.
 *
 * @extends Component
 */
class MediaLoader extends Component {

  /**
   * Créer une instance de cette classe.
   *
   * @param {Player} player
   *        Le `Player` auquel cette classe doit s'attacher.
   *
   * @param {Objet} [options]
   *        La mémoire clé/valeur des options du lecteur.
   *
   * @param {Component~ReadyCallback} [ready]
   *        La fonction qui est exécutée lorsque ce composant est prêt.
   */
  constructor(player, options, ready) {
    // MediaLoader n'a pas d'élément
    const options_ = mergeOptions({createEl : false}, options) ;

    super(player, options_, ready) ;

    // S'il n'y a pas de sources lors de l'initialisation du lecteur,
    // charger la première technologie de lecture prise en charge.

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

        // Prise en charge de l'ancien comportement des technologies enregistrées en tant que composants.
        // Supprimer une fois que ce comportement déprécié est supprimé.
        if (!techName) {
          tech = Component.getComponent(techName) ;
        }

        // Vérifier si le navigateur supporte cette technologie
        if (tech && tech.isSupported()) {
          player.loadTech_(techName) ;
          pause ;
        }
      }
    } else {
      // Passer en revue les technologies de lecture (par exemple HTML5) et vérifier si elles sont prises en charge.
      // Charge ensuite la meilleure source.
      // Quelques hypothèses ici :
      // Toutes les technologies de lecture respectent preload false.
      player.src(options.playerOptions.sources) ;
    }
  }
}

Component.registerComponent('MediaLoader', MediaLoader) ;
exporter le MediaLoader par défaut ;