/**
 * @Datei format-time.js
 * @modul format-time
 * /

/**
 * Formatiert die Sekunden als Zeitstring, H:MM:SS oder M:SS. Bereitstellung eines Leitfadens (in
 * sekunden) erzwingt eine Anzahl von führenden Nullen, um die Länge der
 * leitfaden.
 *
 * @privat
 * @param {Anzahl} Sekunden
 *         Anzahl der Sekunden, die in eine Zeichenkette umgewandelt werden sollen
 *
 * @param {Nummer} guide
 *         Anzahl (in Sekunden), nach der die Zeichenfolge modelliert werden soll
 *
 * @return {string}
 *         Uhrzeit formatiert als H:MM:SS oder M:SS
 * /
const defaultImplementation = function(seconds, guide) {
  sekunden = Sekunden < 0 ? 0 : Sekunden;
  let s = Math.floor(Sekunden % 60);
  let m = Math.floor(Sekunden / 60 % 60);
  let h = Math.floor(Sekunden / 3600);
  const gm = Math.floor(guide / 60 % 60);
  const gh = Math.floor(guide / 3600);

  // Behandlung ungültiger Zeiten
  if (isNaN(Sekunden) || Sekunden === Unendlich) {
    // '-' ist falsch für alle relationalen Operatoren (z. B. <, >=), so dass diese Einstellung
    // fügt die im Leitfaden angegebene Mindestanzahl von Feldern hinzu
    h = m = s = '-';
  }

  // Prüfen Sie, ob wir Stunden anzeigen müssen
  h = (h > 0 || gh > 0) ? h + ':' : '';

  // Wenn Stunden angezeigt werden, müssen wir eventuell eine führende Null hinzufügen.
  // Zeigt immer mindestens eine Stelle der Minuten an.
  m = (((h || gm >= 10) && m < 10) ? 0' + m : m) + ':';

  // Prüfen, ob eine führende Null für Sekunden benötigt wird
  s = (s < 10) ? '0' + s : s;

  h + m + s zurückgeben;
};

// Interner Zeiger auf die aktuelle Implementierung.
let implementation = defaultImplementation;

/**
 * Ersetzt die Standardimplementierung von formatTime durch eine eigene Implementierung.
 *
 * @param {Funktion} customImplementation
 *        Eine Funktion, die anstelle der Standardfunktion formatTime verwendet wird
 *        umsetzung. Erhält die aktuelle Zeit in Sekunden und die
 *        leitfaden (in Sekunden) als Argumente.
 * /
export function setFormatTime(customImplementation) {
  implementierung = customImplementation;
}

/**
 * Setzt formatTime auf die Standardimplementierung zurück.
 * /
export function resetFormatTime() {
  implementierung = defaultImplementation;
}

/**
 * Delegiert entweder an die Standardfunktion zur Zeitformatierung oder an eine benutzerdefinierte
 * funktion, die über "setFormatTime" bereitgestellt wird.
 *
 * Formatiert Sekunden als Zeitstring (H:MM:SS oder M:SS). Lieferung einer
 * leitfaden (in Sekunden) wird eine Anzahl führender Nullen erzwingen, um die
 * länge der Führung.
 *
 * @static
 * @Beispiel formatTime(125, 600) === "02:05"
 * @param {Anzahl} Sekunden
 *           Anzahl der Sekunden, die in eine Zeichenkette umgewandelt werden sollen
 *
 * @param {Nummer} guide
 *           Anzahl (in Sekunden), nach der die Zeichenfolge modelliert werden soll
 *
 * @return {string}
 *           Uhrzeit formatiert als H:MM:SS oder M:SS
 * /
function formatTime(seconds, guide = seconds) {
  return implementation(seconds, guide);
}

standardformat exportierenZeit;