import { OrderStatusEnum } from '@/pages/order/enum/OrderEnum' import { ProformaInvoiceStatusEnum } from '@/pages/invoice/enum/InvoiceEnum' import { PaymentStatusEnum } from '@/pages/payment/enum/Enum' /** نوع ظاهری وضعیت: موفق، هشدار، خطا، اطلاعات */ export type StatusVariant = 'success' | 'warning' | 'error' | 'info' | 'neutral' export type StatusConfig = { label: string variant: StatusVariant } /** * رجیستری مرکزی وضعیت‌ها. * هر وضعیت (از هر enum) را با ترجمه و نوع ظاهری ثبت کن تا در StatusBadge استفاده شود. * برای اضافه کردن وضعیت جدید: یک کلید (مقدار enum یا string از API) و مقدار { label, variant } بگذار. */ export const statusRegistry: Record = { // --- ProformaInvoiceStatusEnum --- [ProformaInvoiceStatusEnum.PENDING]: { label: 'در انتظار تایید', variant: 'warning' }, [ProformaInvoiceStatusEnum.CONFIRMED]: { label: 'تایید شده', variant: 'success' }, [ProformaInvoiceStatusEnum.ARCHIVED]: { label: 'آرشیو شده', variant: 'neutral' }, // --- Invoice confirm status (from API) --- pending: { label: 'در انتظار تایید', variant: 'warning' }, partially_confirmed: { label: 'تایید جزئی', variant: 'info' }, confirmed: { label: 'تایید شده', variant: 'success' }, archived: { label: 'آرشیو شده', variant: 'neutral' }, // --- OrderStatusEnum --- [OrderStatusEnum.CREATED]: { label: 'ایجاد شده', variant: 'info' }, [OrderStatusEnum.INVOICED]: { label: 'فاکتور شده', variant: 'success' }, [OrderStatusEnum.WAITING_to_CONFIRM_INVOICE]: { label: 'در انتظار تایید فاکتور', variant: 'warning' }, [OrderStatusEnum.DESIGN_INITIATED]: { label: 'شروع طراحی', variant: 'info' }, [OrderStatusEnum.DESIGN_FINISHED]: { label: 'طراحی تمام شده', variant: 'success' }, [OrderStatusEnum.DESIGN_REVISION]: { label: 'بازنگری طراحی', variant: 'warning' }, [OrderStatusEnum.READY_TO_PRINTING]: { label: 'آماده چاپ', variant: 'info' }, [OrderStatusEnum.IN_PRINTING]: { label: 'در حال چاپ', variant: 'info' }, [OrderStatusEnum.AFTER_PRINT_COVER]: { label: 'پس از چاپ جلد', variant: 'info' }, [OrderStatusEnum.AFTER_PRINT_CARTONING]: { label: 'کارتن‌سازی', variant: 'info' }, [OrderStatusEnum.AFTER_PRINT_BOXING]: { label: 'بسته‌بندی', variant: 'info' }, [OrderStatusEnum.READY_FOR_DELIVERY]: { label: 'آماده ارسال', variant: 'info' }, [OrderStatusEnum.DELIVERED]: { label: 'تحویل شده', variant: 'success' }, [OrderStatusEnum.FINISHED]: { label: 'پایان یافته', variant: 'success' }, [OrderStatusEnum.CANCELED]: { label: 'لغو شده', variant: 'error' }, // --- PaymentStatusEnum --- // Pending shared with ticket (same value 'pending') — see ticket section [PaymentStatusEnum.Paid]: { label: 'پرداخت شده', variant: 'success' }, [PaymentStatusEnum.Failed]: { label: 'ناموفق', variant: 'error' }, [PaymentStatusEnum.Refunded]: { label: 'مسترد شده', variant: 'info' }, // --- تیکت (مقادیر از API معمولاً uppercase می‌آیند؛ getStatusConfig از toUpperCase/toLowerCase استفاده می‌کند) --- PENDING: { label: 'در انتظار', variant: 'warning' }, ANSWERED: { label: 'پاسخ داده شده', variant: 'success' }, CLOSED: { label: 'بسته شده', variant: 'error' }, } /** * ثبت یا به‌روزرسانی یک وضعیت در رجیستری (برای استفاده در ران‌تایم اگر لازم شد). * برای تعریف ثابت، مستقیم به آبجکت statusRegistry اضافه کن. */ export function registerStatus(key: string, config: StatusConfig): void { statusRegistry[key] = config } export function getStatusConfig(status: string | undefined | null): StatusConfig | null { if (status == null || status === '') return null return statusRegistry[status] ?? statusRegistry[status.toUpperCase()] ?? statusRegistry[status.toLowerCase()] ?? null }