/**
 * @ formato de archivo-tiempo.js
 * @módulo formato-tiempo
 * /

/ **
 * Formatee los segundos como una cadena de tiempo, H:MM:SS o M:SS. Proporcionar una guía (en
 * segundos) forzará un número de ceros a la izquierda para cubrir la longitud del
 * guía.
 *
 * @privado
 * @param {número} segundos
 * Número de segundos para convertirse en una cadena
 *
 * guía @param {número}
 * Número (en segundos) para modelar la cadena después
 *
 * @return {cadena}
 * Hora formateada como H:MM:SS o M:SS
 * /
const defaultImplementation = function(segundos, guía) {
  segundos = segundos < 0? 0 : segundos;
  let s = Matemáticas.piso(segundos % 60);
  let m = Math.floor(segundos / 60 % 60);
  let h = Math.floor (segundos / 3600);
  const gm = Matemáticas.piso(guía / 60 % 60);
  const gh = Matemáticas.piso(guía/3600);

  // manejar tiempos inválidos
  if (isNaN(segundos) || segundos === Infinito) {
    // '-' es falso para todos los operadores relacionales (p. ej. < , > =) por lo que esta configuración
    // agregará el número mínimo de campos especificado por la guía
    h = m = s = '-';
  }

  // Comprobar si necesitamos mostrar horas
  h = (h > 0 || gh > 0) ? h + ':' : '';

  // Si se muestran las horas, es posible que debamos agregar un cero inicial.
  // Mostrar siempre al menos un dígito de minutos.
  m = (((h || gramo > = 10) && metro < 10) ? '0' + m : m) + ':';

  // Comprueba si el cero inicial es necesario para los segundos
  s = (s < 10) ? '0' + s : s;

  devuelve h + m + s;
};

// Puntero interno a la implementación actual.
let implementacion = implementacion por defecto;

/ **
 * Reemplaza la implementación predeterminada de formatTime con una implementación personalizada.
 *
 * @param {Función} implementación personalizada
 * Una función que se usará en lugar del formatTime predeterminado
 * implementación. Recibirá la hora actual en segundos y el
 * guía (en segundos) como argumentos.
 * /
exportar función setFormatTime(customImplementation) {
  implementación = implementación personalizada;
}

/ **
 * Restablece formatTime a la implementación predeterminada.
 * /
función de exportación resetFormatTime() {
  implementación = implementación predeterminada;
}

/ **
 * Delegados a la función de formato de hora predeterminada o a una personalizada
 * función suministrada a través de `setFormatTime`.
 *
 * Da formato a los segundos como una cadena de tiempo (H:MM:SS o M:SS). suministro de un
 * guía (en segundos) forzará un número de ceros a la izquierda para cubrir el
 * longitud de la guía.
 *
 * @estático
 * @example formatTime(125, 600) === &quot;02:05&quot;
 * @param {número} segundos
 * Número de segundos para convertirse en una cadena
 *
 * guía @param {número}
 * Número (en segundos) para modelar la cadena después
 *
 * @return {cadena}
 * Hora formateada como H:MM:SS o M:SS
 * /
función formatTime(segundos, guía = segundos) {
  implementación de retorno (segundos, guía);
}

exportar formatTime por defecto;