/**
 * @file close-button.js
 */
import Button from './button' ;
import Component from './component' ;
import keycode from 'keycode' ;

/**
 * Le `CloseButton` est un `{@link Button}` qui déclenche un événement `close` lorsque
 * il est cliqué.
 *
 * bouton @extends
 */
class CloseButton 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.controlText(options && options.controlText || this.localize('Close')) ;
  }

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

  /**
   * Cette fonction est appelée lorsqu'un `CloseButton` est cliqué. Voir
   * {@link ClickableComponent#handleClick} pour plus d'informations sur l'utilisation de la fonction
   * cela sera déclenché
   *
   * @param {EventTarget~Event} event
   *        L'événement `keydown`, `tap` ou `click` qui a provoqué l'activation de cette fonction est le suivant
   *        appelé.
   *
   * @listens tap
   * @listens click
   * @fires CloseButton#close
   */
  handleClick(event) {

    /**
     * Déclenché lorsqu'un `CloseButton` est cliqué.
     *
     * @event CloseButton#close
     * @type {EventTarget~Event}
     *
     * @property {boolean} [bubbles=false]
     *           est fixé à false pour que l'événement de fermeture ne soit pas
     *           s'adresser aux parents s'il n'y a pas d'auditeur
     */
    this.trigger({type : 'close', bubbles : false}) ;
  }
  /**
   * Gestionnaire d'événements appelé lorsqu'un `CloseButton` reçoit une commande
   * événement `keydown`.
   *
   * Par défaut, si la touche est Esc, elle déclenche un événement `click`.
   *
   * @param {EventTarget~Event} event
   *        L'événement `keydown` qui a provoqué l'appel de cette fonction.
   *
   * @listens keydown
   */
  handleKeyDown(event) {
    // Le bouton Esc déclenchera l'événement `click`
    if (keycode.isEventKey(event, 'Esc')) {
      event.preventDefault() ;
      event.stopPropagation() ;
      this.trigger('click') ;
    } else {
      // Transmettre la gestion des pressions de touches pour les touches non prises en charge
      super.handleKeyDown(event) ;
    }
  }
}

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