'use client'; import { useState } from 'react'; import Link from 'next/link'; import { MessageCircle } from 'lucide-react'; import { buildDeliveryInquiryMessage, buildPickupInquiryMessage, } from '@/application/messaging/whatsapp-message-builder'; import type { FulfillmentMode } from '@/domain/cart/inquiry'; import type { DeliveryInquiryDetails, PickupInquiryDetails } from '@/domain/cart/inquiry'; import { calculateLineTotal, formatLineQuantityLabel, } from '@/domain/shared/order-line'; import { RESTAURANT_CONTACT } from '@/domain/shared/constants'; import { container } from '@/infrastructure/di/container'; import { useCart } from '@/presentation/providers/cart-provider'; import { useLanguage } from '@/presentation/providers/language-provider'; import { getTranslation } from '@/presentation/i18n/translations'; import CartInquiryModal from '@/components/CartInquiryModal'; export default function CartDrawer() { const { items, isOpen, closeCart, totalPrice, removeFromCart, updateQuantity, clearCart, } = useCart(); const { language } = useLanguage(); const t = getTranslation(language); const [inquiryMode, setInquiryMode] = useState(null); const inquiryCopy = { pickupIntro: t.cartDrawer.inquiryPickupIntro, deliveryIntro: t.cartDrawer.inquiryDeliveryIntro, messageTotal: t.cartDrawer.messageTotal, messageName: t.cartDrawer.messageName, messagePhone: t.cartDrawer.messagePhone, messageAddress: t.cartDrawer.messageAddress, messagePreferredTime: t.cartDrawer.messagePreferredTime, deliverySwishNote: t.cartDrawer.deliverySwishNote, }; const openWhatsApp = (message: string | null) => { if (!message) return; container.messagingGateway.openWhatsApp(message); setInquiryMode(null); }; const handlePickupSubmit = (details: PickupInquiryDetails) => { openWhatsApp(buildPickupInquiryMessage(items, details, inquiryCopy)); }; const handleDeliverySubmit = (details: DeliveryInquiryDetails) => { openWhatsApp(buildDeliveryInquiryMessage(items, details, inquiryCopy)); }; if (!isOpen) return null; return ( <>

{t.cartDrawer.title}

{items.length > 0 && ( {items.length} {items.length === 1 ? t.cartDrawer.item : t.cartDrawer.items} )}
{items.length > 0 && ( )}
{items.length === 0 ? (
🛒

{t.cartDrawer.empty}

{t.cartDrawer.browseMenu}
) : (
{items.map((item) => (

{item.name}

{item.pricingMode === 'weight' ? `${item.pricePerHalfKg ?? item.price} kr / ½ kg` : `${item.price} kr × ${item.quantity}`}

{calculateLineTotal(item)} kr
{formatLineQuantityLabel(item)}
))}
)}
{items.length > 0 && (
{t.cartDrawer.total} {totalPrice.toFixed(0)} kr

{t.cartDrawer.inquiryHint}

)}
{inquiryMode && ( setInquiryMode(null)} onSubmitPickup={handlePickupSubmit} onSubmitDelivery={handleDeliverySubmit} labels={{ titlePickup: t.cartDrawer.inquiryModalTitlePickup, titleDelivery: t.cartDrawer.inquiryModalTitleDelivery, nameLabel: t.cartDrawer.nameLabel, namePlaceholder: t.cartDrawer.namePlaceholder, phoneLabel: t.cartDrawer.phoneLabel, phonePlaceholder: t.cartDrawer.phonePlaceholder, addressLabel: t.cartDrawer.addressLabel, addressPlaceholder: t.cartDrawer.addressPlaceholder, preferredTimeLabel: t.cartDrawer.preferredTimeLabel, preferredTimePlaceholder: t.cartDrawer.preferredTimePlaceholder, submitPickup: t.cartDrawer.submitPickup, submitDelivery: t.cartDrawer.submitDelivery, cancel: t.cartDrawer.inquiryCancel, close: t.cartDrawer.inquiryClose, nameRequired: t.cartDrawer.nameRequired, phoneRequired: t.cartDrawer.phoneRequired, addressRequired: t.cartDrawer.addressRequired, timeRequired: t.cartDrawer.timeRequired, }} /> )} ); }