/* eslint-disable @next/next/no-img-element */ "use client"; import React from "react"; import { motion, AnimatePresence } from "motion/react"; import { X, Download, Package, ShoppingBag, MapPin, Clock, CreditCard, CheckCircle2, Truck } from "lucide-react"; import { toPersian } from "../lib/utils"; interface OrderDetailsModalProps { isOpen: boolean; onClose: () => void; order: Record | null; } export default function OrderDetailsModal({ isOpen, onClose, order }: OrderDetailsModalProps) { if (!order) return null; const getProductName = (p: Record | undefined) => String(p?.nameFa || p?.name || p?.nameEn || 'محصول کنینا'); const getProductImage = (p: Record | undefined) => String(p?.imageUrl || p?.image || '/products/product-placeholder.png'); const displayTrackingCode = String(order.trackingNumber || (typeof order.id === 'string' ? order.id.substring(0, 8) : '') || 'CN-0000'); const rawDate = order.date || order.createdAt; const orderDate = rawDate ? new Date(String(rawDate)) : new Date(); const formattedDate = orderDate.toLocaleDateString("fa-IR"); const formattedTime = orderDate.toLocaleTimeString("fa-IR", { hour: '2-digit', minute: '2-digit' }); const items = Array.isArray(order.items) ? (order.items as Record[]) : (Array.isArray(order.orderItems) ? (order.orderItems as Record[]) : []); const itemsSubtotal = items.reduce((sum: number, item: Record) => { const prod = item.product as Record | undefined; const price = Number(prod?.priceValue || item.priceValue || 0); return sum + price * Number(item.quantity || 1); }, 0); const charityAmount = Number(order.charityDonation || 0); const totalAmount = Number(order.total || order.totalAmount || itemsSubtotal + charityAmount); const isRefill = Boolean(order.isRefill); const refillDiscount = isRefill ? Math.round(itemsSubtotal * 0.05) : 0; const paymentMethodText = order.paymentMethod === 'wallet' ? 'پرداخت از کیف پول الکترونیک' : 'پرداخت آنلاین از درگاه شتاب'; const handlePrint = () => { const printWindow = window.open('', '_blank'); if (!printWindow) return; const itemsHtml = items.map((item: Record) => { const prod = item.product as Record | undefined; const pName = getProductName(prod); const pImg = getProductImage(prod); const pPrice = Number(prod?.priceValue || item.priceValue || 0); const rowTotal = pPrice * Number(item.quantity || 1); return `
${pName} ${pName}
${toPersian(Number(item.quantity || 1))} ${toPersian(pPrice.toLocaleString())} تومان ${toPersian(rowTotal.toLocaleString())} تومان `; }).join(''); printWindow.document.write(` فاکتور رسمی کنینا - ${displayTrackingCode}
CANINA | کنینا
کد پیگیری: ${toPersian(displayTrackingCode)}
تاریخ: ${toPersian(formattedDate)} - ساعت ${toPersian(formattedTime)}

گیرنده و آدرس: ${order.shippingAddress || "ثبت‌شده در حساب کاربری"}

روش پرداخت: ${paymentMethodText}

وضعیت سفارش: ${order.status === 'delivered' ? 'تحویل شده' : 'در حال پردازش در انبار'}

نوع سفارش: ${isRefill ? 'تمدید خودکار (Refill)' : 'عادی'}

${itemsHtml}
شرح محصول تعداد قیمت واحد مجموع
مجموع اولیه اقلام: ${toPersian(itemsSubtotal.toLocaleString())} تومان
${isRefill ? `
تخفیف تمدید خودکار (۵٪): ${toPersian(refillDiscount.toLocaleString())}- تومان
` : ''} ${charityAmount > 0 ? `
کمک اهدایی (ردپای مهربانی): ${toPersian(charityAmount.toLocaleString())}+ تومان
` : ''}
هزینه ارسال: رایگان
مبلغ نهایی پرداخت شده: ${toPersian(totalAmount.toLocaleString())} تومان
`); printWindow.document.close(); }; const getStatusIcon = (status: string) => { switch (status) { case 'delivered': return ; case 'shipped': return ; default: return ; } }; const getStatusLabel = (status: string) => { switch (status) { case 'delivered': return 'تحویل شده'; case 'shipped': return 'ارسال شده'; default: return 'در حال پردازش'; } }; return ( {isOpen && (
{/* Header */}

سفارش {toPersian(displayTrackingCode)}

ثبت شده در {toPersian(formattedDate)} - ساعت {toPersian(formattedTime)}

{/* Content Scrollable */}
{/* Summary Stats */}
وضعیت تحویل
{getStatusIcon(String(order.status || ''))} {getStatusLabel(String(order.status || ''))}
کد پیگیری
{toPersian(displayTrackingCode)}
زمان دقیق
{toPersian(formattedTime)}
{/* Items List */}

سبد محصولات خریده شده

{items.map((item: Record, idx: number) => { const prod = item.product as Record | undefined; const pName = getProductName(prod); const pImg = getProductImage(prod); const pPrice = Number(prod?.priceValue || item.priceValue || 0); const itemQty = Number(item.quantity || 1); return (
{pName}
{pName}

{toPersian(itemQty)} عدد × {toPersian(pPrice.toLocaleString())} تومان

{toPersian((pPrice * itemQty).toLocaleString())} تومان
); })}
{/* Shipping & Payment */}

اطلاعات ارسال

{String(order.shippingAddress || "آدرس ثبتی کاربر در حساب کاربری")}

جزئیات مالی و روش پرداخت

روش پرداخت: {paymentMethodText}
مجموع اولیه اقلام: {toPersian(itemsSubtotal.toLocaleString())} تومان
{isRefill && (
رزرو هوشمند تمدید (۵٪ پاداش خرید بعدی): فعال ({toPersian(Math.round(itemsSubtotal * 0.05).toLocaleString())} تومان)
)} {charityAmount > 0 && (
کمک اهدایی (ردپای مهربانی): {toPersian(charityAmount.toLocaleString())}+ تومان
)}
هزینه ارسال: رایگان
مبلغ نهایی پرداخت شده: {toPersian(totalAmount.toLocaleString())} تومان
{/* Footer Actions */}
)}
); }