import { useQuery } from '@tanstack/react-query' import { useSystemConfigStore } from '@/stores/system-config-store' import { getStatus } from '@/lib/api' import type { SystemStatus } from '@/features/auth/types' import { mapStatusDataToConfig } from './use-system-config' // Get initial cache from localStorage function getInitialStatus(): SystemStatus | undefined { try { if (typeof window !== 'undefined') { const saved = window.localStorage.getItem('status') return saved ? (JSON.parse(saved) as SystemStatus) : undefined } } catch { /* empty */ } return undefined } export function useStatus() { const { data, isLoading, error } = useQuery({ queryKey: ['status'], queryFn: async () => { const status = await getStatus() try { if (status) { const { setConfig } = useSystemConfigStore.getState() setConfig(mapStatusDataToConfig(status)) } } catch (err) { if (import.meta.env.DEV) { // eslint-disable-next-line no-console console.warn( '[useStatus] Failed to sync status to system config', err ) } } // Save to localStorage try { if (typeof window !== 'undefined' && status) { window.localStorage.setItem('status', JSON.stringify(status)) } } catch { /* empty */ } return status as SystemStatus | null }, // Use localStorage data as initial data placeholderData: getInitialStatus(), // Data becomes stale after 5 minutes staleTime: 5 * 60 * 1000, // Cache expires after 30 minutes gcTime: 30 * 60 * 1000, }) return { status: data ?? null, loading: isLoading, error, } }