import { QueryClient } from "@tanstack/react-query"; // Single QueryClient for the app. TanStack Query owns SERVER state (fetch, cache, // refetch, loading/error) — wrapping the existing thin api.ts fetchers. Client/UI // state (live feed, WS status) lives in Zustand, not here. The WS layer invalidates // these caches on live events so Query stays the source of truth for server data. // // Defaults tuned for a single-appliance booth: no window-focus refetch (it's a // kiosk, not a tab someone switches to), and a short staleTime since the WS is the // real freshness mechanism — queries are the fallback/initial load. export const queryClient = new QueryClient({ defaultOptions: { queries: { refetchOnWindowFocus: false, staleTime: 5_000, retry: 1, }, }, }); /** Stable query keys — referenced by both the screens and the WS invalidator. */ export const qk = { me: ["me"] as const, occupancy: ["occupancy"] as const, events: ["events"] as const, activeSessions: ["active-sessions"] as const, siteConfig: ["site-config"] as const, shift: ["shift"] as const, deviceStatus: ["device-status"] as const, report: (from: string, to: string, bucket: string) => ["report", from, to, bucket] as const, recycleBin: ["recycle-bin"] as const, } as const;