/**
 * @file text-track-list.js
 */
import TrackList from './track-list' ;

/**
 * La liste actuelle des {@link TextTrack} d'un fichier média.
 *
 * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist}
 * @extends TrackList
 */
class TextTrackList extends TrackList {

  /**
   * Ajouter un {@link TextTrack} à la `TextTrackList`
   *
   * @param {TextTrack} track
   *        La piste de texte à ajouter à la liste.
   *
   * @fires TrackList#addtrack
   */
  addTrack(track) {
    super.addTrack(track) ;

    if (!this.queueChange_) {
      this.queueChange_ = () => this.queueTrigger('change') ;
    }
    if (!this.triggerSelectedlanguagechange) {
      this.triggerSelectedlanguagechange_ = () => this.trigger('selectedlanguagechange') ;
    }

    /**
     * @listens TextTrack#modechange
     * @fires TrackList#change
     */
    track.addEventListener('modechange', this.queueChange_) ;
    const nonLanguageTextTrackKind = ['metadata', 'chapters'] ;

    if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) {
      track.addEventListener('modechange', this.triggerSelectedlanguagechange_) ;
    }
  }

  removeTrack(rtrack) {
    super.removeTrack(rtrack) ;

    // supprimer manuellement les gestionnaires d'événements que nous avons ajoutés
    if (rtrack.removeEventListener) {
      if (this.queueChange_) {
        rtrack.removeEventListener('modechange', this.queueChange_) ;
      }
      if (this.selectedlanguagechange_) {
        rtrack.removeEventListener('modechange', this.triggerSelectedlanguagechange_) ;
      }
    }
  }
}
export default TextTrackList ;