/**
 * @file off-text-track-menu-item.js
 */
import TextTrackMenuItem de './text-track-menu-item.js' ;
import Component from '../../component.js' ;

/**
 * Un élément de menu spécial pour la transformation d'un type spécifique de piste de texte
 *
 * @extends TextTrackMenuItem
 */
class OffTextTrackMenuItem extends TextTrackMenuItem {

  /**
   * Crée une instance de cette classe.
   *
   * @param {Player} player
   *        Le `Player` auquel cette classe doit être attachée.
   *
   * @param {Objet} [options]
   *        La mémoire clé/valeur des options du lecteur.
   */
  constructor(player, options) {
    // Création de pseudo-informations sur les pistes
    // Requiert que les options['kind']
    options.track = {
      joueur,
      // il n'est plus nécessaire de stocker `kind` ou `kinds` sur la piste elle-même
      // puisqu'ils sont maintenant stockés dans la propriété `kinds` de toutes les instances de
      // TextTrackMenuItem, mais cette option sera conservée pour des raisons de compatibilité ascendante
      kind : options.kind,
      kinds : options.kinds,
      par défaut : false,
      mode : "désactivé
    };

    if (!options.kinds) {
      options.kinds = [options.kind] ;
    }

    if (options.label) {
      options.track.label = options.label ;
    } else {
      options.track.label = options.kinds.join(' and ') + ' off' ;
    }

    // L'élément de menu est sélectionnable
    options.selectable = true ;
    // L'élément de menu n'est PAS multi-sélectionnable (c'est-à-dire qu'un seul élément peut être marqué comme "sélectionné" à la fois)
    options.multiSelectable = false ;

    super(player, options) ;
  }

  /**
   * Gérer le changement de piste du texte
   *
   * @param {EventTarget~Event} event
   *        L'événement qui a provoqué l'exécution de cette fonction
   */
  handleTracksChange(event) {
    const tracks = this.player().textTracks() ;
    let shouldBeSelected = true ;

    for (let i = 0, l = tracks.length ; i < l ; i++) {
      const track = tracks[i] ;

      if ((this.options_.kinds.indexOf(track.kind) > -1) && track.mode === 'showing') {
        shouldBeSelected = false ;
        pause ;
      }
    }

    // Empêchez les appels redondants à selected(), car ils peuvent causer des problèmes d'accès à l'information
    // les lecteurs d'écran lisent inutilement le texte de contrôle annexé
    if (shouldBeSelected !== this.isSelected_) {
      this.selected(shouldBeSelected) ;
    }
  }

  handleSelectedLanguageChange(event) {
    const tracks = this.player().textTracks() ;
    let allHidden = true ;

    for (let i = 0, l = tracks.length ; i < l ; i++) {
      const track = tracks[i] ;

      if ((['captions', 'descriptions', 'subtitles'].indexOf(track.kind) > -1) && track.mode === 'showing') {
        allHidden = false ;
        pause ;
      }
    }

    if (allHidden) {
      this.player_.cache_.selectedLanguage = {
        activé : faux
      };
    }
  }

}

Component.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem) ;
export default OffTextTrackMenuItem ;