'use client'; import {useEffect, useRef, useState} from 'react'; import Link from 'next/link'; import {Alert, App, Button, Empty, Skeleton, Steps} from 'antd'; import {DownloadOutlined, FileExcelOutlined, PrinterOutlined} from '@ant-design/icons'; import type {CustomerOrder} from '@/types/account'; import {useAuth} from '@/app/context/AuthContext'; import {useLanguage} from '@/app/context/LanguageContext'; import {accountCopy, orderStatusLabels, paymentStatusLabels} from '@/data/account'; import {getOrder} from '@/services/orders'; import {downloadInvoiceExcel, downloadInvoicePdf} from '@/lib/invoice'; import OrderStatusTag from '@/components/dashboard/OrderStatusTag'; import InvoiceDocument from '@/components/dashboard/InvoiceDocument'; export default function OrderDetailsPage({params}: {params: {id: string}}) { const auth = useAuth(); const {message} = App.useApp(); const {locale} = useLanguage(); const copy = accountCopy[locale]; const [order, setOrder] = useState(null); const [exporting, setExporting] = useState<'pdf' | 'excel' | null>(null); const invoiceRef = useRef(null); const numberLocale = locale === 'fa' ? 'fa-IR' : 'en-US'; const money = (value: number) => `${value.toLocaleString(numberLocale)} ${locale === 'fa' ? 'ریال' : 'Rials'}`; useEffect(() => { if (auth.session) getOrder(params.id, auth.session.profile).then(setOrder); }, [auth.session, params.id]); if (order === null) return ; if (!order) return
{copy.backToOrders}
; const exportPdf = async () => { if (!invoiceRef.current) return; setExporting('pdf'); try { await downloadInvoicePdf(invoiceRef.current, order.invoice!.number); } catch { await message.error('ساخت فایل PDF انجام نشد. دوباره تلاش کنید.'); } finally { setExporting(null); } }; const exportExcel = async () => { setExporting('excel'); try { await downloadInvoiceExcel(order, order.invoice!.number); } catch { await message.error('ساخت فایل Excel انجام نشد. دوباره تلاش کنید.'); } finally { setExporting(null); } }; return <> {copy.backToOrders}

{copy.orderNumber}

{order.number}

{copy.orderDate}{order.createdAt}
{copy.lastUpdate}{order.updatedAt}
{copy.paymentStatus}{paymentStatusLabels[locale][order.paymentStatus]}

{copy.timeline}

({title: orderStatusLabels[locale][event.status], description: `${event.date} — ${event.note}`, status: event.completed ? 'finish' : 'wait'}))}/>

{copy.orderItems}

{order.items.map(item =>
{item.name}

{item.name}

{item.model}

{copy.modules}: {item.modules.join('، ')}

{copy.quantity}: {item.quantity.toLocaleString(numberLocale)} · {copy.total}: {money(item.quantity * item.unitPrice)}

)}

{copy.invoice}

{!order.invoice ? : <>
}
; }