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<ApiResponse<BookingServicesData>>({
    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,
  };
}
