import { useQuery } from '@tanstack/react-query'; import { api, type ApiResponse } from '../lib/api'; export type ResourceTimelineItem = { uuid: string; starts_at: number; ends_at: number; status: 'booked' | 'hold'; segment_name: string | null; appointment_id: number | null; patient_name: string | null; appointment_uuid: string | null; appointment_status: string | null; }; export type ResourceTimelineLane = { uuid: string; name: string; type_name: string; address_name: string | null; capacity: number; shifts: { start_minute: number; end_minute: number }[]; items: ResourceTimelineItem[]; }; export type ResourceTimelineDay = { date: number; day_of_week: number; resources: ResourceTimelineLane[]; }; /** * «کدام منبع در این روز کِی گرفته است» — ورودی نمای منبع‌محورِ صفحهٔ نوبت‌ها. * * بازه‌ها از جدول اشغال می‌آیند نه از خودِ نوبت: آماده‌سازی و تمیزکاری دستگاه هم * درونشان است و همان بازه‌ای است که موتور جستجو اشغال می‌بیند. */ export function useResourceTimeline(date: string, addressUuid?: string) { const params = new URLSearchParams({ date }); if (addressUuid) params.set('address_uuid', addressUuid); const query = useQuery({ queryKey: ['resource-timeline', date, addressUuid ?? null], queryFn: () => api.get>(`/api/v1/resources/timeline?${params}`), enabled: !!date, }); return { day: query.data?.data, loading: query.isLoading, error: query.isError ? ((query.error as Error)?.message || 'خطای نامشخص') : null, }; }