/**
 * Die Sprechgeschwindigkeit der Vorlesefunktion.
 *
 * **Warum es das gibt.** `useVorlesen` setzte an der Äußerung bis 0.22.0 nur
 * `lang` und `voice`; `rate` blieb auf der Systemvorgabe. Wer schneller oder
 * langsamer hören musste, konnte nichts tun. Die Zielgruppe der Funktion ist
 * im Quelltext selbst benannt – Menschen mit Lese-Rechtschreib-Störung und
 * ermüdeten Augen –, und für sie ist ein festes Tempo bei einer über eine
 * Minute langen Erklärung eine echte Hürde.
 *
 * **Warum die Leiter eng bleibt.** Unter 0,75 klingen die Systemstimmen unter
 * Windows verwaschen, über 1,5 verschlucken sie Endungen. Beides schadet dem
 * Verstehen mehr, als der Zeitgewinn nützt — und eine Stufe, die niemand
 * benutzen kann, ist keine Wahl, sondern eine Falle.
 *
 * **Warum hier und nicht bei der Sprachausgabe.** Der Hauptprozess muss den
 * Wert bereinigen, bevor er in `einstellungen.json` geht, und er darf keinen
 * Renderer-Code laden.
 */

/** Die wählbaren Geschwindigkeiten als `rate` der Web Speech API. */
export const SPRECHTEMPI = [0.75, 1, 1.25, 1.5] as const;

export type Sprechtempo = (typeof SPRECHTEMPI)[number];

export const SPRECHTEMPO_STANDARD: Sprechtempo = 1;

/** „Langsam“, „Normal“ … – für Beschriftung und Ansage. */
export const SPRECHTEMPO_BEZEICHNUNG: Readonly<Record<string, string>> = Object.freeze({
  '0.75': 'Langsam',
  '1': 'Normal',
  '1.25': 'Zügig',
  '1.5': 'Schnell',
});

export function sprechtempoBereinigen(wert: unknown): Sprechtempo {
  return typeof wert === 'number' && (SPRECHTEMPI as readonly number[]).includes(wert)
    ? (wert as Sprechtempo)
    : SPRECHTEMPO_STANDARD;
}

/** „Normal“ – die Beschriftung zur Stufe. */
export function sprechtempoText(tempo: number): string {
  return SPRECHTEMPO_BEZEICHNUNG[String(sprechtempoBereinigen(tempo))] ?? 'Normal';
}

/** „Sprechtempo: Zügig.“ – für die Live-Region nach dem Umstellen. */
export function sprechtempoAnsage(tempo: number): string {
  return `Sprechtempo: ${sprechtempoText(tempo)}.`;
}
