"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 } 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 { useSettingsStore } from "../lib/store/settingsStore"; import { useCatalogMode } from "../lib/useCatalogMode"; import AuthModal from "./AuthModal"; import DeleteConfirmModal from "./DeleteConfirmModal"; 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 { showPrices } = useCatalogMode(); const isRefillEnabled = useSettingsStore((state) => state.getText('REFILL_SUBSCRIPTION_ENABLED', 'false') === 'true'); const refillPercent = useSettingsStore((state) => state.getText('REFILL_REWARD_PERCENT', '5')); 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 { Promise.resolve().then(() => setSuggestedProduct(null)); } }, [hasLachsOl, hasCanhydrox]); // Lock background body scroll and handle browser back button to close drawer useEffect(() => { if (isOpen) { document.body.style.overflow = "hidden"; if (typeof window !== "undefined") { window.history.pushState({ modal: "cart_drawer" }, ""); } } else { document.body.style.overflow = "unset"; } const handlePopState = () => { if (isOpen) { onClose(); } }; window.addEventListener("popstate", handlePopState); return () => { document.body.style.overflow = "unset"; window.removeEventListener("popstate", handlePopState); }; }, [isOpen, onClose]); return ( {isOpen && ( <> {/* Header */}

سبد خرید

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

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

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

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

{item.product.category}

{toPersian(item.quantity)}
{showPrices && (
{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 (Only when prices are active) */} {showPrices && (
کد تخفیف اختصاصی
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 */} {showPrices && isRefillEnabled && (
{ 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'}`} >
سامانه تمدید هوشمند و {toPersian(refillPercent)}٪ پاداش Cashback

{toPersian(refillPercent)}٪ شارژ هدیه کیف پول روی خرید تمدید بعدی همین محصول + ارسال اولویت‌دار

برنامه هوشمند وفاداری — یادآوری دقیق زمان اتمام مکمل پت بر اساس دوز دامپزشک + {toPersian(refillPercent)}٪ اعتبار هدیه بازگشت وجه

{isSubscribed && }
)} {/* Official Germany Catalog Authenticity Guarantee Banner */}
ضمانت اصالت کاتالوگ آلمان واردات مستقیم دارویی • مشاوره رایگان قبل خرید
تماس فوری ({useSettingsStore.getState().getText('contact_phone', '۰۲۱-۸۸۸۸۴۴۴۴')})
setIsAuthModalOpen(false)} /> {showPrices ? (
مجموع اقلام {toPersian(getSubtotal().toLocaleString())} تومان
{getDiscount() > 0 && (
مجموع تخفیف‌ها -{toPersian(getDiscount().toLocaleString())} تومان
)}
مجموع قابل پرداخت

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

تومان

) : (
تعداد کل اقلام انتخابی {toPersian(items.reduce((acc, curr) => acc + curr.quantity, 0))} قلم کالا
)}
)} setDeleteConfirmId(null)} onConfirm={() => { if (deleteConfirmId) { removeItem(deleteConfirmId); setDeleteConfirmId(null); toast.success("محصول از سبد خرید حذف شد"); } }} title="حذف از سبد خرید" message="آیا از حذف این مکمل دارویی از سبد خرید خود اطمینان دارید؟" /> )} ); }