/**
 * @file text-track-cue-list.js
 */

/**
 * @typedef {Objet} TextTrackCueList~TextTrackCue
 *
 * @property {string} id
 *           L'identifiant unique de ce repère de texte
 *
 * @property {number} startTime
 *           L'heure de début de ce repère de texte
 *
 * @property {number} endTime
 *           L'heure de fin de ce repère de texte
 *
 * @property {boolean} pauseOnExit
 *           Pause lorsque l'heure de fin est atteinte si elle est vraie.
 *
 * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcue}
 */

/**
 * Une liste de TextTrackCues.
 *
 * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist}
 */
class TextTrackCueList {

  /**
   * Créer une instance de cette classe...
   *
   * @param {Array} cues
   *        Une liste d'indices à initialiser avec
   */
  constructor(cues) {
    TextTrackCueList.prototype.setCues_.call(this, cues) ;

    /**
     * @memberof TextTrackCueList
     * @member {number} length
     *         Le nombre actuel de `TextTrackCue`s dans la TextTrackCueList.
     * @instance
     */
    Object.defineProperty(this, 'length', {
      get() {
        return this.length_ ;
      }
    }) ;
  }

  /**
   * Un setter pour les cues de cette liste. Crée des getters
   * un index pour les indices.
   *
   * @param {Array} cues
   *        Une série d'indices pour définir
   *
   * @private
   */
  setCues_(cues) {
    const oldLength = this.length || 0 ;
    laissez i = 0 ;
    const l = cues.length ;

    this.cues_ = cues ;
    this.length_ = cues.length ;

    const defineProp = function(index) {
      if ( !(' + index in this)) {
        Object.defineProperty(this, '' + index, {
          get() {
            return this.cues_[index] ;
          }
        }) ;
      }
    };

    if (oldLength < l) {
      i = oldLength ;

      for ( ; i < l ; i++) {
        defineProp.call(this, i) ;
      }
    }
  }

  /**
   * Obtenir un `TextTrackCue` qui est actuellement dans la `TextTrackCueList` par son identifiant.
   *
   * @param {string} id
   *        L'identifiant de l'indice à rechercher.
   *
   * @return {TextTrackCueList~TextTrackCue|null}
   *         Un seul indice ou zéro si aucun indice n'a été trouvé.
   */
  getCueById(id) {
    let result = null ;

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

      if (cue.id === id) {
        résultat = cue ;
        pause ;
      }
    }

    retourner le résultat ;
  }
}

export default TextTrackCueList ;