'use client'; import React from 'react'; import Link from 'next/link'; import { X, Trash2, ShoppingBag, ArrowRight, Zap, Truck, MessageCircle } from 'lucide-react'; import { CartItem, City } from '@/types'; import { formatCOP, calculateSeparationBreakdown } from '@/lib/pricing-engine'; import { useBrand } from '@/context/BrandContext'; import { renderClientTemplate } from '@/lib/templates-client'; import { OptimizedImage } from '@/components/ui/OptimizedImage'; interface CartDrawerProps { isOpen: boolean; onClose: () => void; cartItems: CartItem[]; onRemoveItem: (productId: string, size: string) => void; onUpdateQuantity: (productId: string, size: string, delta: number) => void; selectedCity: City; onOpenCitySelector: () => void; } export const CartDrawer: React.FC = ({ isOpen, onClose, cartItems, onRemoveItem, onUpdateQuantity, selectedCity, onOpenCitySelector, }) => { const { currentBrand } = useBrand(); const [officialPhone, setOfficialPhone] = React.useState('573106390296'); React.useEffect(() => { fetch('/api/settings') .then((r) => r.json()) .then((d) => { if (d.success && d.settings?.whatsappNumber) { setOfficialPhone(d.settings.whatsappNumber); } }) .catch(() => {}); }, []); if (!isOpen) return null; const totalQuantity = cartItems.reduce((acc, item) => acc + item.quantity, 0); const subtotal = cartItems.reduce((acc, item) => acc + item.product.retailPrice * item.quantity, 0); const shippingCost = selectedCity.shippingCost; const totalAmount = subtotal + shippingCost; const separation = calculateSeparationBreakdown(totalAmount); const handleWhatsAppCheckout = () => { const itemsList = cartItems .map((item) => `👟 *${item.product.name}* (Talla: *${item.selectedSize}*, Cant: ${item.quantity}) - ${formatCOP(item.product.retailPrice * item.quantity)}`) .join('\n'); const paymentCondition = `⚡ *Condición de Pago:* Pago Contraentrega (Separo con $10.000 COP y cancelo saldo de ${formatCOP(separation.balanceDue)} al recibir).`; const rawText = renderClientTemplate('order_checkout_wa', { tienda_nombre: currentBrand.name, orden_id: `WEB-${Date.now().toString().slice(-4)}`, cliente_nombre: 'Cliente', cliente_telefono: '', cliente_direccion: '', cliente_ciudad: selectedCity.name, articulos_resumen: itemsList, total: `${formatCOP(totalAmount)} COP`, condicion_pago_resumen: paymentCondition, metodo_pago: 'Pago Contraentrega', saldo_contraentrega: formatCOP(separation.balanceDue), }); window.open(`https://wa.me/${officialPhone}?text=${encodeURIComponent(rawText)}`, '_blank'); }; return (
{/* Backdrop */}
{/* Header */}

Tu Carrito • {currentBrand.shortName}

{cartItems.length} {cartItems.length === 1 ? 'artículo' : 'artículos'}

{/* Items List */}
{cartItems.length === 0 ? (

Tu carrito está vacío

Aprovecha las ofertas de calzado con pago contraentrega en Cali y despachos nacionales.

) : ( cartItems.map((item, idx) => (

{item.product.name}

Talla {item.selectedSize} {item.product.brand}
{formatCOP(item.product.retailPrice * item.quantity)}
{item.quantity}
)) )}
{/* Footer & Checkout Breakdown */} {cartItems.length > 0 && (
{/* City Delivery selector pill */}
Destino: {selectedCity.name}
{/* Price Calculations */}
Subtotal: {formatCOP(subtotal)}
Costo de Envío: {shippingCost === 0 ? Gratis : formatCOP(shippingCost)}
Total de la Orden: {formatCOP(totalAmount)}
⚡ Separación (1er Pedido): $10.000 COP
🤝 Saldo Restante Contraentrega: {formatCOP(Math.max(0, totalAmount - 10000))}
{/* Separation Highlight Banner */}

Separación fija de $10.000 COP (1er Pedido)

Separas tu pedido completo ({totalQuantity} {totalQuantity > 1 ? 'productos' : 'producto'}) con una tarifa única de $10.000 COP y cancelas el saldo restante ({formatCOP(Math.max(0, totalAmount - 10000))}) contraentrega al recibir en tu puerta.

🛡️ {selectedCity.firstExchangeFree ? `1er Cambio de Talla 100% GRATIS en ${selectedCity.name}` : `Garantía de cambio en ${selectedCity.name} (flete asumido por cliente)`}

{/* Action Button */}
🎟️ ¿Tienes cupón de descuento? Podrás aplicarlo al pagar
Continuar al Pago Contraentrega
)}
); };