/** * Serviço para gerenciar endereços via BFF */ const BFF_BASE_URL = process.env.NEXT_PUBLIC_BFF_API_URL!; /** * Interface para endereço */ export interface Endereco { $id?: string; id?: string; cep: string; logradouro: string; numero: string; complemento?: string; bairro: string; cidade: string; estado: string; pais?: string; principal?: boolean; $createdAt?: string; $updatedAt?: string; } /** * Serviço de endereços */ export const enderecoService = { /** * Busca um endereço por ID * @param enderecoId - ID do endereço * @returns Dados do endereço */ buscarPorId: async (enderecoId: string): Promise => { try { const token = localStorage.getItem('access_token'); if (!token) { throw new Error('Token de autenticação não encontrado'); } const response = await fetch(`${BFF_BASE_URL}/enderecos/${enderecoId}`, { method: 'GET', headers: { 'accept': 'application/json', 'Authorization': `Bearer ${token}`, }, }); if (!response.ok) { const errorText = await response.text(); console.error(`❌ Erro ao buscar endereço:`, errorText); throw new Error(`Erro ao buscar endereço: ${response.status}`); } const endereco = await response.json(); return endereco; } catch (error) { console.error('❌ Erro no enderecoService.buscarPorId:', error); throw error; } }, /** * Busca endereço por CEP usando API pública */ buscarPorCep: async (cep: string): Promise | null> => { try { const cleanCep = cep.replace(/\D/g, ''); if (cleanCep.length !== 8) return null; const response = await fetch(`https://cep.awesomeapi.com.br/json/${cleanCep}`); if (!response.ok) return null; const data = await response.json(); return { cep: data.cep, logradouro: data.address, bairro: data.district, cidade: data.city, estado: data.state, // AwesomeAPI retorna 'address', 'district', 'city', 'state', 'lat', 'lng' }; } catch (error) { console.error('❌ Erro ao buscar CEP:', error); return null; } }, /** * Busca endereços por usuário (mantido para compatibilidade) */ buscarPorUserId: async () => ({ data: [], total: 0 }), /** * Cria um novo endereço (mantido para compatibilidade) */ criar: async () => ({ success: false, message: 'Service removido' }), /** * Atualiza um endereço (mantido para compatibilidade) */ atualizar: async () => ({ success: false, message: 'Service removido' }), /** * Exclui um endereço (mantido para compatibilidade) */ excluir: async () => ({ success: false, message: 'Service removido' }) };