import { useEffect, useState } from 'react';

import { lernBruecke } from '../lernen/bruecke';

/**
 * Meldet, ob gerade ein Hilfsmittel läuft (Screenreader, Bildschirmlupe …).
 *
 * Grundlage ist `app.accessibilitySupportEnabled` von Electron. Der Wert wird
 * beim Aufbau abgefragt und danach über eine Meldung des Anwendungskerns
 * aktuell gehalten – ein Screenreader kann auch mitten in der Sitzung
 * gestartet werden, gerade dann, wenn jemand merkt, dass er ihn braucht.
 *
 * Fehlt der Kanal (etwa in Tests oder einer älteren Fassung), bleibt der Wert
 * `false`. Das ist die richtige Annahme: Ohne Erkennung soll die Anwendung
 * sich verhalten wie bisher und nicht raten.
 */
export function useHilfsmittelAktiv(): boolean {
  const [aktiv, setzeAktiv] = useState(false);

  useEffect(() => {
    let lebt = true;

    const lesen = lernBruecke()?.hilfsmittelAktiv;
    if (lesen) {
      void lesen()
        .then((wert) => {
          if (lebt) {
            setzeAktiv(wert);
          }
        })
        .catch(() => {
          /* Ohne Erkennung bleibt es bei `false`. */
        });
    }

    const beobachten = lernBruecke()?.hilfsmittelBeobachten;
    const abmelden = beobachten?.((wert) => {
      if (lebt) {
        setzeAktiv(wert);
      }
    });

    return () => {
      lebt = false;
      abmelden?.();
    };
  }, []);

  return aktiv;
}
