import React, { useState, useEffect } from "react"; import { X, MapPin, Plus, CheckCircle } from "lucide-react"; import { CustomerAddress, customerService, } from "../../src/services/customer.service"; interface AddressSelectionModalProps { isOpen: boolean; customerId: number | null; onClose: () => void; onSelect: (address: CustomerAddress) => void; onCreateNew: () => void; } const AddressSelectionModal: React.FC = ({ isOpen, customerId, onClose, onSelect, onCreateNew, }) => { const [addresses, setAddresses] = useState([]); const [isLoading, setIsLoading] = useState(false); const [selectedAddressId, setSelectedAddressId] = useState( null ); useEffect(() => { if (isOpen && customerId) { loadAddresses(); } else if (isOpen && !customerId) { console.warn("AddressSelectionModal: customerId não fornecido"); setAddresses([]); } }, [isOpen, customerId]); const loadAddresses = async () => { if (!customerId) { console.warn( "AddressSelectionModal: customerId é obrigatório para carregar endereços" ); setAddresses([]); return; } setIsLoading(true); try { console.log( "AddressSelectionModal: Carregando endereços para customerId:", customerId ); const customerAddresses = await customerService.getCustomerAddresses( customerId ); console.log( "AddressSelectionModal: Endereços carregados:", customerAddresses ); console.log( "AddressSelectionModal: Quantidade de endereços:", customerAddresses.length ); if (!Array.isArray(customerAddresses)) { console.error( "AddressSelectionModal: Resposta da API não é um array:", customerAddresses ); setAddresses([]); return; } setAddresses(customerAddresses); } catch (error) { console.error( "AddressSelectionModal: Erro ao carregar endereços:", error ); setAddresses([]); } finally { setIsLoading(false); } }; const handleSelect = () => { if (selectedAddressId) { const address = addresses.find( (a) => a.id === selectedAddressId || a.idAddress === selectedAddressId || a.addressId === selectedAddressId ); if (address) { onSelect(address); onClose(); } } }; const formatAddress = (address: CustomerAddress) => { const parts = []; const street = address.address || address.street || ""; const number = address.number || address.numberAddress || ""; const complement = address.complement || ""; if (street) parts.push(street); if (number) parts.push(number); if (complement) parts.push(complement); return parts.join(", "); }; const getAddressId = (address: CustomerAddress): number | null => { return address.id || address.idAddress || address.addressId || null; }; if (!isOpen) return null; return (
{/* Header */}

Selecionar endereço de entrega

{addresses.length} endereço{addresses.length !== 1 ? "s" : ""}{" "} encontrado{addresses.length !== 1 ? "s" : ""}

{/* Content */}
{isLoading ? (
) : addresses.length === 0 ? (

Sem endereços cadastrados

Este cliente não possui endereços cadastrados. Clique no botão abaixo para cadastrar um novo endereço.

) : ( <>
{addresses.map((address) => { const addressId = getAddressId(address); const isSelected = selectedAddressId === addressId; return (
setSelectedAddressId(addressId)} className={`p-4 rounded-2xl border-2 transition-all cursor-pointer ${ isSelected ? "bg-orange-50 border-orange-500" : "bg-slate-50 border-slate-200 hover:border-orange-300" }`} >

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

{address.isPrimary && ( Principal )}

{formatAddress(address)}

{(address.neighborhood || address.neighbourhood) && `${ address.neighborhood || address.neighbourhood } - `} {address.city && `${address.city}`} {address.state && `/${address.state}`}

{address.zipCode && (

CEP: {address.zipCode}

)}
{isSelected && (
)}
); })}
)}
{/* Footer */} {addresses.length > 0 && (
)}
); }; export default AddressSelectionModal;