/**
 * @file audio-track-menu-item.js
 */
import MenuItem from '../../menu/menu-item.js' ;
import Component from '../../component.js' ;
import * as Dom from '../../utils/dom.js' ;

/**
 * Un {@link AudioTrack} {@link MenuItem}
 *
 * @extends MenuItem
 */
class AudioTrackMenuItem extends MenuItem {

  /**
   * 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) {
    const track = options.track ;
    const tracks = player.audioTracks() ;

    // Modifier les options pour l'init de la classe MenuItem parente.
    options.label = track.label || track.language || 'Unknown' ;
    options.selected = track.enabled ;

    super(player, options) ;

    this.track = track ;

    this.addClass(`vjs-${track.kind}-menu-item`) ;

    const changeHandler = (...args) => {
      this.handleTracksChange.apply(this, args) ;
    };

    tracks.addEventListener('change', changeHandler) ;
    this.on('dispose', () => {
      tracks.removeEventListener('change', changeHandler) ;
    }) ;
  }

  createEl(type, props, attrs) {
    const el = super.createEl(type, props, attrs) ;
    const parentSpan = el.querySelector('.vjs-menu-item-text') ;

    if (this.options_.track.kind === 'main-desc') {
      parentSpan.appendChild(Dom.createEl('span', {
        className : 'vjs-icon-placeholder'
      }, {
        aria-hidden" : vrai
      })) ;
      parentSpan.appendChild(Dom.createEl('span', {
        className : 'vjs-control-text',
        textContent : ' ' + this.localize('Descriptions')
      })) ;
    }

    return el ;
  }

  /**
   * Cette fonction est appelée lorsqu'un élément de menu `AudioTrackMenuItem est "cliqué". Voir {@link ClickableComponent}
   * pour obtenir des informations plus détaillées sur ce que peut être un clic.
   *
   * @param {EventTarget~Event} [event]
   *        L'événement `keydown`, `tap` ou `click` qui a provoqué l'activation de cette fonction est le suivant
   *        appelé.
   *
   * @listens tap
   * @listens click
   */
  handleClick(event) {
    super.handleClick(event) ;

    // la liste des pistes audio fera automatiquement basculer les autres pistes
    // pour nous.
    this.track.enabled = true ;

    // lorsque des pistes audio natives sont utilisées, nous voulons nous assurer que les autres pistes sont désactivées
    if (this.player_.tech_.featuresNativeAudioTracks) {
      const tracks = this.player_.audioTracks() ;

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

        // sauter la piste en cours puisque nous l'avons activée ci-dessus
        if (track === this.track) {
          continuer ;
        }

        track.enabled = track === this.track ;
      }
    }
  }

  /**
   * Gère tout changement de {@link AudioTrack}.
   *
   * @param {EventTarget~Event} [event]
   *        L'événement {@link AudioTrackList#change} à l'origine de l'exécution.
   *
   * @listens AudioTrackList#change
   */
  handleTracksChange(event) {
    this.selected(this.track.enabled) ;
  }
}

Component.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem) ;
exporter l'élément de menu AudioTrack par défaut ;