import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { api } from '../lib/api';
import type { ApiResponse } from '../lib/api';
import type { PatientRecord, PatientProfileUpdate } from '../types';

/**
 * دریافت یک پروندهٔ بیمار به‌همراه پروفایل کامل (`profile`).
 * منبع: GET /api/v1/patient/{uuid}. کلید کوئری: ['patient', uuid].
 */
export function usePatient(uuid: string | undefined) {
  const query = useQuery<ApiResponse<PatientRecord>>({
    queryKey: ['patient', uuid],
    queryFn: () => api.get(`/api/v1/patient/${uuid}`),
    enabled: !!uuid,
  });

  const record = query.data?.data ?? null;

  return {
    record,
    profile: record?.profile ?? null,
    isLoading: query.isLoading,
    isError: query.isError,
  };
}

/**
 * به‌روزرسانی partial پروفایل بیمار.
 * منبع: PATCH /api/v1/patient/{uuid}. پس از موفقیت، کوئری همان بیمار را invalidate می‌کند.
 */
export function useUpdatePatient(uuid: string) {
  const qc = useQueryClient();

  return useMutation<ApiResponse<PatientRecord>, unknown, PatientProfileUpdate>({
    mutationFn: (body) => api.patch(`/api/v1/patient/${uuid}`, body),
    onSuccess: () => {
      qc.invalidateQueries({ queryKey: ['patient', uuid] });
    },
  });
}
