import type { Order, OrderStatus } from '@/types' import { ORDER_TRACKING_STEPS } from '@/utils/constants' export type StatusHeroVariant = 'waiting' | 'success' | 'info' | 'none' export interface StatusHeroConfig { variant: StatusHeroVariant title: string description?: string } const STATUS_STEP_INDEX: Partial> = { submitted: 0, awaiting_review: 1, pricing: 2, check_in_progress: 3, awaiting_check_review: 4, check_needs_fix: 4, check_rejected: 4, checks_approved: 5, final_approved: 6, cash_confirmed: 6, preparing: 7, ready_to_ship: 8, shipped: 9, delivered: 10, } const STATUS_HERO: Partial> = { submitted: { variant: 'waiting', title: 'پیش‌سفارش ثبت شد', description: 'سفارش شما برای بررسی و قیمت‌گذاری به مدیریت ارسال شد. پس از صدور فاکتور می‌توانید روش تسویه (نقد یا چک) را انتخاب کنید.', }, awaiting_review: { variant: 'waiting', title: 'در انتظار بررسی مدیریت', description: 'پیش‌سفارش شما در صف بررسی است. پس از قیمت‌گذاری و صدور فاکتور، از طریق همین صفحه برای انتخاب تسویه مطلع می‌شوید.', }, pricing: { variant: 'waiting', title: 'در حال قیمت‌گذاری', description: 'مدیریت در حال تعیین مبلغ نهایی فاکتور است. تا قبل از صدور فاکتور امکان ثبت چک یا پرداخت وجود ندارد.', }, awaiting_settlement: { variant: 'info', title: 'فاکتور آماده است', description: 'مبلغ فاکتور مشخص شده. لطفاً روش تسویه را انتخاب کنید و مسیر پرداخت را ادامه دهید.', }, awaiting_settlement_fix: { variant: 'info', title: 'نیاز به اصلاح تسویه', description: 'لطفاً روش تسویه یا اطلاعات پرداخت را اصلاح کنید.', }, awaiting_check_review: { variant: 'waiting', title: 'در حال بررسی چک‌ها', description: 'چک‌های ثبت‌شده در حال بررسی هستند. نتیجه بررسی به‌زودی اعلام می‌شود.', }, checks_approved: { variant: 'success', title: 'چک‌ها تأیید شده', description: 'چک‌های شما توسط مدیریت تأیید شد. سفارش وارد مراحل بعدی می‌شود.', }, cash_confirmed: { variant: 'success', title: 'پرداخت تأیید شد', description: 'رسید پرداخت شما تأیید شد و سفارش وارد مراحل بعدی می‌شود.', }, final_approved: { variant: 'success', title: 'تأیید نهایی', description: 'سفارش شما تأیید نهایی شد و آماده آماده‌سازی است.', }, preparing: { variant: 'info', title: 'در حال آماده‌سازی', description: 'سفارش شما در انبار در حال آماده‌سازی است.', }, ready_to_ship: { variant: 'info', title: 'آماده ارسال', description: 'سفارش آماده ارسال است و به‌زودی تحویل باربری می‌شود.', }, shipped: { variant: 'info', title: 'ارسال شده', description: 'سفارش ارسال شده است. جزئیات بارنامه را می‌توانید مشاهده کنید.', }, delivered: { variant: 'success', title: 'تحویل شده', description: 'سفارش با موفقیت تحویل داده شد.', }, } export function getTrackingStepIndex(status: OrderStatus): number { return STATUS_STEP_INDEX[status] ?? 1 } export function getStatusHero(status: OrderStatus): StatusHeroConfig | null { return STATUS_HERO[status] ?? null } export function getStepTimestamp(order: Order, stepStatus: OrderStatus): string | null { if (stepStatus === 'submitted') { return order.createdAt } const entry = [...order.statusHistory] .reverse() .find((item) => item.toStatus === stepStatus) return entry?.changedAt ?? null } export function getTrackingFooterLabel(status: OrderStatus): string { if (status === 'shipped') return 'مشاهده جزئیات و بارنامه' if (['checks_approved', 'cash_confirmed', 'delivered', 'final_approved'].includes(status)) { return 'مشاهده جزئیات' } return 'مشاهده جزئیات سفارش' } export { ORDER_TRACKING_STEPS }