// SSE-Eventstrom (UMBAU v3 P3a) — Gegenstück zu backend/routers/events.py.
// EIN EventSource auf /api/events; `invalidate`-Events stoßen gezielt die React-Query-
// Caches an. Solange der Strom steht, sind die Poller nur noch Sicherheitsnetz
// (queries.ts entspannt sie ×5 über sseVerbunden()). Reißt der Strom (MC2-Deploy,
// Netz), reconnectet EventSource von selbst — bis dahin pollt die UI wie früher.

import { useEffect } from "react"
import { useQueryClient } from "@tanstack/react-query"

let verbunden = false
export const sseVerbunden = () => verbunden

export function useEventStream() {
  const qc = useQueryClient()
  useEffect(() => {
    const es = new EventSource("/api/events")
    es.onopen = () => { verbunden = true }
    es.onerror = () => { verbunden = false }
    es.addEventListener("invalidate", (e) => {
      try {
        const keys: string[] = JSON.parse((e as MessageEvent).data)?.keys ?? []
        for (const k of keys) qc.invalidateQueries({ queryKey: [k] })
      } catch { /* kaputtes Event bricht den Strom nicht */ }
    })
    return () => { verbunden = false; es.close() }
  }, [qc])
}
