/**
 * 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<Endereco | null> => {
    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<Partial<Endereco> | 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' })
};