import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; import { api, ApiError, type ApiResponse } from '../lib/api'; export type RecordNumberResetPolicy = 'none' | 'yearly' | 'monthly'; export interface RecordNumberSettings { enabled: boolean; pattern: string; reset_policy: RecordNumberResetPolicy; counter: number; /** شمارهٔ بعدی، بدون مصرف‌کردن شمارنده. */ next_preview: string; /** فقط صاحب مجموعه (و ادمین) اجازهٔ ذخیره دارد؛ گیت اصلی سمت سرور است. */ can_edit: boolean; } const KEY = ['record-number-settings']; /** * الگوی شمارهٔ پروندهٔ محیط جاری. * * هم صفحهٔ تنظیمات از آن می‌خواند، هم فرم پرونده — فرم باید بداند شماره خودکار * ساخته می‌شود یا هنوز دستی است. */ export function useRecordNumberSettings() { const qc = useQueryClient(); const query = useQuery({ queryKey: KEY, queryFn: () => api.get>('/api/v1/patient-record-number-settings'), staleTime: 60_000, // منشیِ بدون مجوز `patients.view` اینجا ۴۰۳ می‌گیرد؛ تلاش دوباره چیزی عوض نمی‌کند. retry: false, }); const save = useMutation({ mutationFn: (d: Pick) => api.put>('/api/v1/patient-record-number-settings', d), onSuccess: () => { toast.success('الگوی شماره پرونده ذخیره شد'); qc.invalidateQueries({ queryKey: KEY }); }, onError: (e) => toast.error(e instanceof ApiError ? e.message : 'ذخیرهٔ الگو ناموفق بود'), }); return { settings: query.data?.data ?? null, loading: query.isLoading, save }; }