/**
 * @file remaining-time-display.js
 */
import TimeDisplay from './time-display' ;
import Component from '../../component.js' ;
import * as Dom from '../../utils/dom.js' ;

/**
 * Affiche le temps restant dans la vidéo
 *
 * @extends Component
 */
class RemainingTimeDisplay extends TimeDisplay {

  /**
   * 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.on(player, 'durationchange', (e) => this.updateContent(e)) ;
  }

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

  /**
   * Créer l'élément DOM du `Composant` avec le caractère "moins" en préambule à l'heure
   *
   * @return {Element}
   *         L'élément qui a été créé.
   */
  createEl() {
    const el = super.createEl() ;

    if (this.options_.displayNegative !== false) {
      el.insertBefore(Dom.createEl('span', {}, {'aria-hidden' : true}, '-'), this.contentEl_) ;
    }
    return el ;
  }

  /**
   * Mise à jour de l'affichage du temps restant.
   *
   * @param {EventTarget~Event} [event]
   *        L'événement `timeupdate` ou `durationchange` qui a provoqué l'exécution.
   *
   * @listens Player#timeupdate
   * @listens Player#durationchange
   */
  updateContent(event) {
    if (typeof this.player_.duration() !== 'number') {
      retour ;
    }

    temps d'attente ;

    // @deprecated Nous ne devrions utiliser que remainingTimeDisplay
    // à partir de video.js 7
    if (this.player_.ended()) {
      temps = 0 ;
    } else if (this.player_.remainingTimeDisplay) {
      time = this.player_.remainingTimeDisplay() ;
    } else {
      time = this.player_.remainingTime() ;
    }

    this.updateTextNode_(time) ;
  }
}

/**
 * Texte ajouté à l'affichage du `RemainingTimeDisplay` pour les utilisateurs de lecteurs d'écran.
 *
 * @type {string}
 * @private
 */
RemainingTimeDisplay.prototype.labelText_ = 'Temps restant' ;

/**
 * Le texte qui doit s'afficher au-dessus des contrôles `RemainingTimeDisplay`. Ajouté pour la localisation.
 *
 * @type {string}
 * @private
 *
 * @deprecated in v7 ; controlText_ n'est pas utilisé dans les composants d'affichage non actifs
 */
RemainingTimeDisplay.prototype.controlText_ = 'Temps restant' ;

Component.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay) ;
exporter l'affichage par défaut de la durée restante ;