import { useState } from "react" import { useHomelab, useWartung, useWartungSetzen } from "@/lib/abfragen" import type { WartungsRegel } from "@/lib/typen" import { flugplanZeit } from "@/lib/zeit" // Wartungsfenster und Update-Regel je Gerät (Ausbauplan Welle 3, Punkt 17, seit 25.09.2026). Der Steward des // Homelab-Teils spielt im Fenster ein, was die Regel erlaubt; der Proxmox-Host startet nie von selbst neu. const TAGE = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"] const REGEL: Record = { melden: "Nur melden", sicherheit: "Sicherheitsupdates automatisch", alles: "Alles automatisch im Fenster", } const feld = "h-10 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-lab/60" function RegelWahl({ wert, onWahl, label, mitStandard }: { wert: WartungsRegel | null onWahl: (r: WartungsRegel | null) => void label: string mitStandard?: string }) { return ( ) } export function Wartungsfenster({ aktiv }: { aktiv: boolean }) { const w = useWartung(aktiv) const ziele = useHomelab(aktiv).data?.ziele ?? [] const setzen = useWartungSetzen() const [fenster, setFenster] = useState<{ tag: number; von: string; bis: string } | null>(null) if (!w.data) return

{w.isPending ? "Wird gelesen …" : "Das Wartungsfenster lässt sich gerade nicht lesen."}

const f = fenster ?? w.data.fenster const geaendert = !!fenster && JSON.stringify(fenster) !== JSON.stringify(w.data.fenster) const s = w.data.stand return (

Im Fenster spielt der Orchestrator ein, was die Regel des Geräts erlaubt — mit Snapshot vorher und Rückweg bei Rot. Einzelne Erfolge kommen gesammelt als eine Meldung, Fehler sofort. Den Proxmox-Host startet er nie von selbst neu.

Nächstes Fenster: {flugplanZeit(new Date(w.data.naechstes * 1000).toISOString()).toLowerCase()} {s ? ` · zuletzt ${s.datum.split("-").reverse().join(".")}: ${s.status === "laeuft" ? "läuft gerade" : `${s.schritte.length} Schritte`}` : ""}

{ziele.map((z) => (
{z.name} setzen.mutate({ regeln: { [z.id]: r } })} />
))}
) }