'use client'; import { useCallback, useEffect, useState } from 'react'; import { getLocalDayIsoRange } from '@/components/appointments/appointmentTime'; import { todayApi } from '@/lib/api/today'; import type { TodaySummaryData } from '@/types/today'; import type { ApiError } from '@/types/api'; interface UseTodaySummaryResult { data: TodaySummaryData | null; loading: boolean; isInitialLoad: boolean; error: ApiError | null; reload: () => Promise; } export function useTodaySummary(organizationId?: string | null): UseTodaySummaryResult { const enabled = Boolean(organizationId); const [data, setData] = useState(null); const [loading, setLoading] = useState(enabled); const [error, setError] = useState(null); const reload = useCallback(async () => { if (!organizationId) { setData(null); setLoading(false); setError(null); return; } setLoading(true); setError(null); try { const range = getLocalDayIsoRange(new Date()); const utcOffsetMinutes = -new Date().getTimezoneOffset(); const response = await todayApi.summary({ ...range, utcOffsetMinutes }); setData(response.data); } catch (err) { setError(err as ApiError); } finally { setLoading(false); } }, [organizationId]); useEffect(() => { setData(null); setError(null); if (!organizationId) { setLoading(false); return; } setLoading(true); void reload(); }, [organizationId, reload]); return { data, loading, isInitialLoad: loading && !data, error, reload, }; }