'use client'; import { useCallback, useEffect, useState } from 'react'; import { MessageCircle, X } from 'lucide-react'; import type { FulfillmentMode } from '@/domain/cart/inquiry'; import type { DeliveryInquiryDetails, PickupInquiryDetails } from '@/domain/cart/inquiry'; export interface CartInquiryModalLabels { titlePickup: string; titleDelivery: string; nameLabel: string; namePlaceholder: string; phoneLabel: string; phonePlaceholder: string; addressLabel: string; addressPlaceholder: string; preferredTimeLabel: string; preferredTimePlaceholder: string; submitPickup: string; submitDelivery: string; cancel: string; close: string; nameRequired: string; phoneRequired: string; addressRequired: string; timeRequired: string; } interface CartInquiryModalProps { mode: FulfillmentMode; isOpen: boolean; onClose: () => void; onSubmitPickup: (details: PickupInquiryDetails) => void; onSubmitDelivery: (details: DeliveryInquiryDetails) => void; labels: CartInquiryModalLabels; } const emptyPickup = (): PickupInquiryDetails => ({ name: '', phone: '' }); const emptyDelivery = (): DeliveryInquiryDetails => ({ name: '', phone: '', address: '', preferredTime: '', }); export default function CartInquiryModal({ mode, isOpen, onClose, onSubmitPickup, onSubmitDelivery, labels, }: CartInquiryModalProps) { const [pickup, setPickup] = useState(emptyPickup); const [delivery, setDelivery] = useState(emptyDelivery); const [errors, setErrors] = useState>({}); const handleKeyDown = useCallback( (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }, [onClose], ); useEffect(() => { if (!isOpen) return; setErrors({}); window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [isOpen, handleKeyDown, mode]); useEffect(() => { if (!isOpen) { setPickup(emptyPickup()); setDelivery(emptyDelivery()); setErrors({}); } }, [isOpen]); if (!isOpen) return null; const title = mode === 'pickup' ? labels.titlePickup : labels.titleDelivery; const submitLabel = mode === 'pickup' ? labels.submitPickup : labels.submitDelivery; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); const nextErrors: Record = {}; if (mode === 'pickup') { if (!pickup.name.trim()) nextErrors.name = labels.nameRequired; if (!pickup.phone.trim()) nextErrors.phone = labels.phoneRequired; if (Object.keys(nextErrors).length) { setErrors(nextErrors); return; } onSubmitPickup(pickup); return; } if (!delivery.name.trim()) nextErrors.name = labels.nameRequired; if (!delivery.phone.trim()) nextErrors.phone = labels.phoneRequired; if (!delivery.address.trim()) nextErrors.address = labels.addressRequired; if (!delivery.preferredTime.trim()) nextErrors.preferredTime = labels.timeRequired; if (Object.keys(nextErrors).length) { setErrors(nextErrors); return; } onSubmitDelivery(delivery); }; const inputClass = 'mt-1.5 w-full rounded-xl border border-[#EDE6D9] bg-[#FFFCF7] px-3 py-2.5 text-sm text-[#2C2A26] placeholder:text-[#8A8478] focus:border-[#c99a2e] focus:ring-2 focus:ring-[#c99a2e]/20'; return ( <>
e.stopPropagation()} >

{title}

{ const v = e.target.value; if (mode === 'pickup') setPickup((p) => ({ ...p, name: v })); else setDelivery((d) => ({ ...d, name: v })); if (errors.name) setErrors((err) => ({ ...err, name: '' })); }} placeholder={labels.namePlaceholder} className={inputClass} autoComplete="name" /> {errors.name && (

{errors.name}

)}
{ const v = e.target.value; if (mode === 'pickup') setPickup((p) => ({ ...p, phone: v })); else setDelivery((d) => ({ ...d, phone: v })); if (errors.phone) setErrors((err) => ({ ...err, phone: '' })); }} placeholder={labels.phonePlaceholder} className={inputClass} autoComplete="tel" /> {errors.phone && (

{errors.phone}

)}
{mode === 'delivery' && ( <>