import React, { useState, useEffect } from "react"; import { CustomerAddress } from "../../src/services/customer.service"; import { MapPin, Plus, Pencil, Trash2, ArrowLeft, ArrowRight, CheckCircle, } from "lucide-react"; import AddressSelectionModal from "./AddressSelectionModal"; import AddressFormModal from "./AddressFormModal"; import ConfirmDialog from "../ConfirmDialog"; interface AddressStepProps { addressForm: { zipCode: string; address: string; number: string; city: string; state: string; complement: string; referencePoint: string; note: string; }; addressErrors: Record; selectedAddress: CustomerAddress | null; customerId: number | null; onFormChange: (field: string, value: string) => void; onShowAddressModal: () => void; onRemoveAddress: () => void; onSelectAddress: (address: CustomerAddress) => void; onPrevious: () => void; onNext: () => void; } const AddressStep: React.FC = ({ addressForm, addressErrors, selectedAddress, customerId, onFormChange, onShowAddressModal, onRemoveAddress, onSelectAddress, onPrevious, onNext, }) => { const [showSelectionModal, setShowSelectionModal] = useState(false); const [showFormModal, setShowFormModal] = useState(false); const [showRemoveDialog, setShowRemoveDialog] = useState(false); const [editingAddress, setEditingAddress] = useState( null ); const formatAddress = (address: CustomerAddress) => { const parts = []; if (address.address) parts.push(address.address); if (address.number) parts.push(address.number); if (address.complement) parts.push(address.complement); return parts.join(", "); }; const handleSelectFromList = () => { if (!customerId) { console.warn( "AddressStep: customerId não fornecido. Não é possível abrir o modal de seleção de endereços." ); return; } console.log( "AddressStep: Abrindo modal de seleção de endereços para customerId:", customerId ); setShowSelectionModal(true); }; const handleCreateNew = () => { setEditingAddress(null); setShowFormModal(true); }; const handleEdit = () => { if (selectedAddress) { setEditingAddress(selectedAddress); setShowFormModal(true); } }; const handleAddressSelected = (address: CustomerAddress) => { onSelectAddress(address); setShowSelectionModal(false); }; const handleAddressSaved = (address: CustomerAddress) => { onSelectAddress(address); setShowFormModal(false); setEditingAddress(null); }; return ( <>

Endereço de entrega

{selectedAddress && ( <> )}
{selectedAddress ? ( /* Endereço Selecionado */

{selectedAddress.addressType || "Endereço"}

{selectedAddress.isPrimary && ( Principal )}

{formatAddress(selectedAddress)}

{selectedAddress.neighborhood && `${selectedAddress.neighborhood} - `} {selectedAddress.city && `${selectedAddress.city}`} {selectedAddress.state && `/${selectedAddress.state}`}

{selectedAddress.zipCode && (

CEP: {selectedAddress.zipCode}

)} {selectedAddress.referencePoint && (

Referência:{" "} {selectedAddress.referencePoint}

)}
) : ( /* Sem Endereço Selecionado */

Nenhum endereço selecionado

Selecione um endereço existente ou cadastre um novo endereço de entrega

)} {/* Formulário de Endereço (apenas quando há endereço selecionado) */} {selectedAddress && (
onFormChange("zipCode", e.target.value)} className={`w-full px-4 py-3 bg-slate-50 rounded-xl font-bold text-[#002147] border ${ addressErrors.zipCode ? "border-red-500" : "border-slate-200" } focus:outline-none focus:ring-2 focus:ring-orange-500/20`} /> {addressErrors.zipCode && (

{addressErrors.zipCode}

)}
onFormChange("address", e.target.value)} className={`w-full px-4 py-3 bg-slate-50 rounded-xl font-bold text-[#002147] border ${ addressErrors.address ? "border-red-500" : "border-slate-200" } focus:outline-none focus:ring-2 focus:ring-orange-500/20`} /> {addressErrors.address && (

{addressErrors.address}

)}
onFormChange("number", e.target.value)} className={`w-full px-4 py-3 bg-slate-50 rounded-xl font-bold text-[#002147] border ${ addressErrors.number ? "border-red-500" : "border-slate-200" } focus:outline-none focus:ring-2 focus:ring-orange-500/20`} /> {addressErrors.number && (

{addressErrors.number}

)}
onFormChange("city", e.target.value)} className={`w-full px-4 py-3 bg-slate-50 rounded-xl font-bold text-[#002147] border ${ addressErrors.city ? "border-red-500" : "border-slate-200" } focus:outline-none focus:ring-2 focus:ring-orange-500/20`} /> {addressErrors.city && (

{addressErrors.city}

)}
onFormChange("state", e.target.value)} className={`w-full px-4 py-3 bg-slate-50 rounded-xl font-bold text-[#002147] border ${ addressErrors.state ? "border-red-500" : "border-slate-200" } focus:outline-none focus:ring-2 focus:ring-orange-500/20`} /> {addressErrors.state && (

{addressErrors.state}

)}
onFormChange("complement", e.target.value)} className="w-full px-4 py-3 bg-slate-50 rounded-xl font-bold text-[#002147] border border-slate-200 focus:outline-none focus:ring-2 focus:ring-orange-500/20" />
onFormChange("referencePoint", e.target.value)} className="w-full px-4 py-3 bg-slate-50 rounded-xl font-bold text-[#002147] border border-slate-200 focus:outline-none focus:ring-2 focus:ring-orange-500/20" />
onFormChange("note", e.target.value)} className="w-full px-4 py-3 bg-slate-50 rounded-xl font-bold text-[#002147] border border-slate-200 focus:outline-none focus:ring-2 focus:ring-orange-500/20" />
)}
{/* Modais */} setShowSelectionModal(false)} onSelect={handleAddressSelected} onCreateNew={() => { setShowSelectionModal(false); handleCreateNew(); }} /> { setShowFormModal(false); setEditingAddress(null); }} onSave={handleAddressSaved} /> setShowRemoveDialog(false)} onConfirm={() => { onRemoveAddress(); setShowRemoveDialog(false); }} type="delete" title="Remover Endereço" message="Tem certeza que deseja remover este endereço de entrega? Esta ação não pode ser desfeita." confirmText="Remover" cancelText="Cancelar" /> ); }; export default AddressStep;