import { useQuery } from '@tanstack/react-query'; import { api } from '../lib/api'; import type { ApiResponse } from '../lib/api'; import { useClinicContext } from './useClinicContext'; export interface BookingService { uuid: string; name: string; duration_minutes: number | null; price_rials: number; service_section: { uuid: string; name: string }; } interface BookingServicesData { booking_mode: 'slot' | 'service'; buffer_minutes: number; services: BookingService[]; } /** * روش نوبت‌دهی و سرویس‌های قابل‌انتخابِ یک پزشک — از endpoint عمومیِ * `appointment-booking-services`. برای سرویس‌محور کردن فرم‌های ثبت نوبت پنل. * * clinicUuidOverride: `undefined` یعنی context محیط جاری؛ مقدار صریح (شامل null = * مطب شخصی) وقتی که انتخاب محل خارج از context انجام شده (مثلاً ادمین). */ export function useDoctorBookingServices( doctorUuid: string | null | undefined, clinicUuidOverride?: string | null, ) { const contextClinicUuid = useClinicContext(); const clinicUuid = clinicUuidOverride === undefined ? contextClinicUuid : clinicUuidOverride; const q = useQuery>({ queryKey: ['booking-services', doctorUuid, clinicUuid], queryFn: () => api.get( `/api/v1/appointment-booking-services/${doctorUuid}` + (clinicUuid ? `?clinic_uuid=${encodeURIComponent(clinicUuid)}` : '') ), enabled: !!doctorUuid, }); const data = q.data?.data as BookingServicesData | undefined; return { bookingMode: (data?.booking_mode === 'service' ? 'service' : 'slot') as 'slot' | 'service', bufferMinutes: data?.buffer_minutes ?? 0, services: data?.services ?? [], isLoading: q.isLoading, }; }