"use client"; import React, { useState, useEffect } from "react"; import { X, Trash2, Plus, Minus, ShoppingBag, ShieldCheck, ArrowLeft, Ticket, Sparkles, CheckCircle2 } from "lucide-react"; import { motion, AnimatePresence } from "motion/react"; import { toPersian, cn } from "../lib/utils"; import { useCartStore } from "../lib/store/cartStore"; import { Product } from "../lib/data/products"; import { productService } from "../lib/services/productService"; import SafeImage from "./SafeImage"; import { useUserStore } from "../lib/store/userStore"; import AuthModal from "./AuthModal"; import { toast } from "sonner"; export default function CartDrawer({ isOpen, onClose, onCheckout, onShopNavigate }: { isOpen: boolean; onClose: () => void; onCheckout: () => void; onShopNavigate?: () => void; }) { const { items, updateQuantity, removeItem, isSubscribed, toggleSubscription, getTotal, getSubtotal, getDiscount, coupon, applyCoupon, addItem } = useCartStore(); const { isLoggedIn } = useUserStore(); const [isAuthModalOpen, setIsAuthModalOpen] = useState(false); const [couponCode, setCouponCode] = useState(""); const [couponStatus, setCouponStatus] = useState<"idle" | "success" | "error">("idle"); const [deleteConfirmId, setDeleteConfirmId] = useState(null); const handleApplyCoupon = async () => { const success = await applyCoupon(couponCode); if (success) { setCouponStatus("success"); setTimeout(() => setCouponStatus("idle"), 3000); } else { setCouponStatus("error"); setTimeout(() => setCouponStatus("idle"), 2000); } }; // Smart Cross-sell Logic const hasCanhydrox = items.some(i => i.product.id === 'canhydrox-gag'); const hasLachsOl = items.some(i => i.product.id === 'lachs-ol'); const [suggestedProduct, setSuggestedProduct] = useState(null); useEffect(() => { if (!hasLachsOl && hasCanhydrox) { productService.getProducts({ limit: 999 }).then(({ data: prods }) => { const found = prods.find(p => p.id === 'lachs-ol' || p.artNo === 'lachs-ol'); setSuggestedProduct(found || null); }); } else { setSuggestedProduct(null); } }, [hasLachsOl, hasCanhydrox]); return ( {isOpen && ( <> {/* Header */}

سبد خرید

{/* Content */}
{items.length === 0 ? (

سبد خرید شما خالی است

) : ( <>
{items.map((item) => (

{item.product.nameFa || item.product.name}

{item.product.category}

{toPersian(item.quantity)}
{toPersian((item.product.priceValue * item.quantity).toLocaleString())} تومان
{/* Delete Confirmation Overlay */} {deleteConfirmId === item.product.id && (

مطمئنی می‌خوای این محصول رو حذف کنی؟

)}
))}
{/* Smart Cross-sell Recommendation */} {suggestedProduct && (
پیشنهاد هوشمند برای جذب بهتر
{suggestedProduct.name}

برای جذب ویتامین‌های Canhydrox، اسیدهای چرب سالمون ضروری هستند.

)} )}
{/* Footer */} {items.length > 0 && (
{/* Discount Code */}
کد تخفیف اختصاصی
setCouponCode(e.target.value)} className={`w-full bg-white border ${couponStatus === 'error' ? 'border-red-300' : 'border-medical-gray-200'} rounded-2xl py-3 px-4 pr-10 text-sm font-bold focus:outline-none focus:ring-2 focus:ring-canina-blue/20 transition-all`} />
{coupon && (
کد {coupon.code} ({(coupon.discount < 1 ? coupon.discount * 100 : coupon.discount)} {coupon.discount < 1 ? '٪' : 'تومان'}) اعمال شد
)}
{/* Subscription Toggle */}
{ if (!isLoggedIn && !isSubscribed) { toast.info("برای فعال‌سازی سرویس تمدید خودکار و دریافت یادآورها، لطفاً ابتدا وارد حساب کاربری خود شوید."); setIsAuthModalOpen(true); return; } toggleSubscription(); }} className={`p-4 rounded-2xl border-2 transition-all cursor-pointer ${isSubscribed ? 'bg-canina-blue/5 border-canina-blue' : 'bg-white border-medical-gray-100 hover:border-canina-blue/30'}`} >
فعال‌سازی سرویس تمدید خودکار (Refill)

۵٪ تخفیف روی تمام فاکتور + ارسال اولویت‌دار

ویژه اعضا - محاسبه هوشمند دوره مصرف و یادآوری پیامکی قبل از اتمام

{isSubscribed && }
{/* Official Germany Catalog Authenticity Guarantee Banner */}
ضمانت اصالت کاتالوگ آلمان واردات مستقیم دارویی • مشاوره رایگان قبل خرید
تماس فوری
setIsAuthModalOpen(false)} />
مجموع اقلام {toPersian(getSubtotal().toLocaleString())} تومان
{getDiscount() > 0 && (
مجموع تخفیف‌ها -{toPersian(getDiscount().toLocaleString())} تومان
)}
مجموع قابل پرداخت

{toPersian(getTotal().toLocaleString())}

تومان

)} )} ); }