/**
 * @archivo play-toggle.js
 * /
importar botón desde '../button.js';
importar componente desde '../component.js';
importar {silencePromise} desde '../utils/promise';

/**
 * Botón para alternar entre reproducción y pausa.
 *
 * Botón @extiende
 * /
clase PlayToggle extiende Botón {

  /**
   * Crea una instancia de esta clase.
   *
   * @param {Jugador} jugador
   * El `Jugador` al que se debe adjuntar esta clase.
   *
   * @param {Objeto} [opciones={}]
   * El almacén de clave/valor de las opciones del jugador.
   * /
  constructor(jugador, opciones = {}) {
    super(jugador, opciones);

    // mostrar u ocultar el icono de reproducción
    options.replay = options.replay === indefinido || opciones.repetir;

    this.on(jugador, 'jugar', (e) => this.handlePlay(e));
    this.on(jugador, 'pausa', (e) => this.handlePause(e));

    if (opciones.repetir) {
      this.on(jugador, 'terminado', (e) => this.handleEnded(e));
    }
  }

  /**
   * Construye el DOM predeterminado `className`.
   *
   * @return {cadena}
   * El DOM `className` para este objeto.
   * /
  construirClaseCSS() {
    devuelve `vjs-play-control ${super.buildCSSClass()}`;
  }

  /**
   * Esto se llama cuando se "hace clic" en `PlayToggle`. Ver
   * {@link ClickableComponent} para obtener información más detallada sobre lo que puede ser un clic.
   *
   * @param {Objetivo de evento~Evento} [evento]
   * El evento `keydown`, `top` o `click` que hizo que esta función se desactivara
   * llamado.
   *
   * @escucha toca
   * @escucha clic
   * /
  handleClick(evento) {
    if (este.jugador_.pausado()) {
      PromesaSilencio(este.jugador_.jugar());
    } else {
      este.jugador_.pausa();
    }
  }

  /**
   * Esto se llama una vez que el video ha terminado y el usuario busca para que
   * podemos cambiar el botón de reproducción de nuevo a un botón de reproducción.
   *
   * @param {Objetivo de evento~Evento} [evento]
   * El evento que provocó la ejecución de esta función.
   *
   * @escucha Player#buscado
   * /
  manejarBuscado(evento) {
    this.removeClass('vjs-terminado');

    if (este.jugador_.pausado()) {
      this.handlePause(evento);
    } else {
      this.handlePlay(evento);
    }
  }

  /**
   * Agregue la clase vjs-playing al elemento para que pueda cambiar de apariencia.
   *
   * @param {Objetivo de evento~Evento} [evento]
   * El evento que provocó la ejecución de esta función.
   *
   * @escucha Player#play
   * /
  handlePlay(evento) {
    this.removeClass('vjs-terminado');
    this.removeClass('vjs-paused');
    this.addClass('vjs-jugando');
    // cambia el texto del botón a "Pausa"
    this.controlText('Pausa');
  }

  /**
   * Agregue la clase pausada de vjs al elemento para que pueda cambiar de apariencia.
   *
   * @param {Objetivo de evento~Evento} [evento]
   * El evento que provocó la ejecución de esta función.
   *
   * @escucha jugador#pausa
   * /
  handlePause(evento) {
    this.removeClass('vjs-jugando');
    this.addClass('vjs-paused');
    // cambia el texto del botón a "Jugar"
    this.controlText('Reproducir');
  }

  /**
   * Agregue la clase terminada en vjs al elemento para que pueda cambiar de apariencia
   *
   * @param {Objetivo de evento~Evento} [evento]
   * El evento que provocó la ejecución de esta función.
   *
   * @escucha Player#finalizado
   * /
  handleEnded(evento) {
    this.removeClass('vjs-jugando');
    this.addClass('vjs-terminado');
    // cambia el texto del botón a "Reproducir"
    this.controlText('Reproducir');

    // en la próxima búsqueda elimina el botón de reproducción
    this.one(this.player_, 'buscado', (e) => this.handleSeeked(e));
  }
}

/**
 * El texto que debería mostrarse sobre los controles de `PlayToggle`. Añadido para la localización.
 *
 * @tipo {cadena}
 * @privado
 * /
PlayToggle.prototype.controlText_ = 'Reproducir';

Component.registerComponent('PlayToggle', PlayToggle);
exportar PlayToggle predeterminado;