/**
 * @file descriptions-button.js
 */
import TextTrackButton de './text-track-button.js' ;
import Component from '../../component.js' ;
import * as Fn from '../../utils/fn.js' ;

/**
 * Le composant bouton pour le basculement et la sélection des descriptions
 *
 * @extends TextTrackButton
 */
class DescriptionsButton extends TextTrackButton {

  /**
   * 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.
   *
   * @param {Component~ReadyCallback} [ready]
   *        La fonction à appeler lorsque ce composant est prêt.
   */
  constructor(player, options, ready) {
    super(player, options, ready) ;

    const tracks = player.textTracks() ;
    const changeHandler = Fn.bind(this, this.handleTracksChange) ;

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

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

    // Vérifier si une piste d'un autre type est affichée
    for (let i = 0, l = tracks.length ; i < l ; i++) {
      const track = tracks[i] ;

      if (track.kind !== this.kind_ && track.mode === 'showing') {
        désactivé = vrai ;
        pause ;
      }
    }

    // Si une autre piste est affichée, ce bouton de menu est désactivé
    if (disabled) {
      this.disable() ;
    } else {
      this.enable() ;
    }
  }

  /**
   * Construit le DOM par défaut `className`.
   *
   * @return {string}
   *         Le `nom de classe` du DOM pour cet objet.
   */
  buildCSSClass() {
    return `vjs-descriptions-button ${super.buildCSSClass()}` ;
  }

  buildWrapperCSSClass() {
    return `vjs-descriptions-button ${super.buildWrapperCSSClass()}` ;
  }
}

/**
 * le type de TextTrack à rechercher pour l'associer à ce menu.
 *
 * @type {string}
 * @private
 */
DescriptionsButton.prototype.kind_ = 'descriptions' ;

/**
 * Le texte qui doit s'afficher au-dessus des contrôles `DescriptionsButton`. Ajouté pour la localisation.
 *
 * @type {string}
 * @private
 */
DescriptionsButton.prototype.controlText_ = 'Descriptions' ;

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