import { useCallback, useState } from 'react';

export interface Hilfefenster {
  readonly offen: boolean;
  readonly oeffnen: () => void;
  readonly schliessen: () => void;
}

/**
 * Der Zustand des Hilfefensters – und der Draht zur Menüleiste.
 *
 * Die Hilfe hat zwei Auslöser, die nichts voneinander wissen: die
 * Schaltfläche im Fußbereich jeder Ansicht und den Menüeintrag „Hilfe →
 * Handbuch“ samt <kbd>F1</kbd>. Der zweite liegt im Hauptprozess und kann
 * die Oberfläche nur über eine Meldung erreichen; beide laufen deshalb hier
 * zusammen, damit der Zustand an einer Stelle liegt.
 *
 * Fehlt der Kanal – etwa in Unit-Tests oder in einer älteren Fassung des
 * Anwendungskerns –, bleibt die Schaltfläche unbeeindruckt: Die Hilfe ist
 * dann eben nur über die Oberfläche erreichbar, nicht über das Menü.
 */
export function useHilfefenster(): Hilfefenster {
  const [offen, setzeOffen] = useState(false);

  const oeffnen = useCallback(() => {
    setzeOffen(true);
  }, []);

  const schliessen = useCallback(() => {
    setzeOffen(false);
  }, []);

  /*
    Die Menübefehle werden seit Fassung 0.26.0 NICHT mehr hier
    entgegengenommen.

    Der Grund ist der Vollständigkeitszwang, der hier stand und der die
    Sache wert ist: Eine Tabelle über den Befehlstyp löst einen
    Übersetzungsfehler aus, sobald ein Befehl unbehandelt bleibt. Seit das
    Menü „Gehe zu“ in Ansichten führt, braucht diese Tabelle Zugriff auf
    `setzeAnsicht` — und den hat nur `App.tsx`. Zwei Tabellen an zwei Orten
    hätten den Zwang halbiert: Jede wäre für sich vollständig gewesen, und
    keine hätte gemerkt, dass die andere einen Befehl doppelt oder gar nicht
    behandelt.

    Dieser Haken hält deshalb nur noch den Zustand des Fensters. `App.tsx`
    ruft `oeffnen` aus seiner Befehlstabelle heraus auf.
  */

  return { offen, oeffnen, schliessen };
}
