import { useQuery } from '@tanstack/react-query'; import { api } from '../lib/api'; import type { ApiResponse } from '../lib/api'; import { useAuthStore } from '../stores/authStore'; import type { MySubscriptionData } from '../types'; export function useSubscription() { const primaryRole = useAuthStore((s) => s.primaryRole); const dbUuid = useAuthStore((s) => s.dbUuid); const enabled = primaryRole === 'doctor' || primaryRole === 'clinic' || primaryRole === 'secretary'; // کلید شامل محیط فعال است: اشتراک روی محیط می‌نشیند، نه روی کاربر. پزشکی که هم // مطب شخصی دارد و هم کلینیک، با کلیدِ بدون محیط پلنِ محیط قبلی را می‌دید و هر دو // محیط ارتقایافته به‌نظر می‌رسیدند. const { data } = useQuery>({ queryKey: ['subscription-my', dbUuid], queryFn: () => api.get('/api/v1/subscription/my'), enabled, staleTime: 2 * 60 * 1000, }); const sub = data?.data?.subscription ?? null; const effectivePlan = data?.data?.effective_plan ?? sub?.plan ?? null; const features: Record = effectivePlan?.features ?? {}; const maxSecretaries: number = effectivePlan?.max_secretaries ?? 1; // `-1` یعنی بی‌نهایت. const maxResources: number = effectivePlan?.max_resources ?? 1; // نقش‌هایی که اشتراک ندارند (ادمین) و لحظهٔ پیش از رسیدن پاسخ: سقف ناشناخته است و // نباید با پیش‌فرضِ ۱ به‌جای کاربر تصمیم گرفت — گیت‌کردن کارِ سرور است. const planLoaded = effectivePlan !== null; const hasPlan = sub !== null; return { subscription: sub, hasFeature: (key: string) => features[key] ?? false, maxSecretaries, maxResources, planLoaded, hasPlan, isExpiringSoon: (sub?.days_remaining ?? 0) > 0 && (sub?.days_remaining ?? 0) <= 7, }; }