/**
 * @file seek-to-live.js
 */
import Button from '../button' ;
import Component from '../component' ;
import * as Dom from '../utils/dom.js' ;

/**
 * Affiche l'indicateur en direct lorsque la durée est Infini.
 *
 * @extends Component
 */
class SeekToLive extends Button {

  /**
   * 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) {
    super(player, options) ;

    this.updateLiveEdgeStatus() ;

    if (this.player_.liveTracker) {
      this.updateLiveEdgeStatusHandler_ = (e) => this.updateLiveEdgeStatus(e) ;
      this.on(this.player_.liveTracker, 'liveedgechange', this.updateLiveEdgeStatusHandler_) ;
    }
  }

  /**
   * Créer l'élément DOM du `Composant`
   *
   * @return {Element}
   *         L'élément qui a été créé.
   */
  createEl() {
    const el = super.createEl('button', {
      className : 'vjs-seek-to-live-control vjs-control'
    }) ;

    this.textEl_ = Dom.createEl('span', {
      className : 'vjs-seek-to-live-text',
      textContent : this.localize('LIVE')
    }, {
      aria-hidden" : "true" (vrai)
    }) ;

    el.appendChild(this.textEl_) ;
    return el ;
  }

  /**
   * Mettre à jour l'état de ce bouton si l'on se trouve au bord de l'écran
   * ou non
   */
  updateLiveEdgeStatus() {
    // par défaut, le bord vivant
    if (!this.player_.liveTracker || this.player_.liveTracker.atLiveEdge()) {
      this.setAttribute('aria-disabled', true) ;
      this.addClass('vjs-at-live-edge') ;
      this.controlText('Seek to live, currently playing live') ;
    } else {
      this.setAttribute('aria-disabled', false) ;
      this.removeClass('vjs-at-live-edge') ;
      this.controlText('Seek to live, currently behind live') ;
    }
  }

  /**
   * En cliquant, nous nous rapprochons le plus possible du point de contact.
   * Pour ce faire, nous devons attendre le prochain "changement à rechercher en direct
   * qui se produira toutes les secondes de longueur de segment.
   */
  handleClick() {
    this.player_.liveTracker.seekToLiveEdge() ;
  }

  /**
   * Éliminer l'élément et arrêter le suivi
   */
  dispose() {
    if (this.player_.liveTracker) {
      this.off(this.player_.liveTracker, 'liveedgechange', this.updateLiveEdgeStatusHandler_) ;
    }
    this.textEl_ = null ;

    super.dispose() ;
  }
}

SeekToLive.prototype.controlText_ = "Seek to live, currently playing live" ;

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