/**
 * Serviço para gerenciar empresas via BFF
 * Integração com https://bff-dev.saveinmed.com.br/api/v1/empresas
 */

const BFF_BASE_URL = process.env.NEXT_PUBLIC_BFF_API_URL!;

export interface EmpresaBff {
    id: string;
    razao_social: string;
    nome_fantasia: string;
    cnpj: string;
    email: string;
    telefone: string;
    cep: string;
    endereco: string;
    numero: string;
    complemento: string;
    bairro: string;
    cidade: string;
    estado: string;
    latitude?: string;
    longitude?: string;
}

export const empresaApiService = {
    /**
     * Busca empresa por ID
     * @param empresaId - ID da empresa
     * @returns Dados da empresa
     */
    buscarPorId: async (empresaId: string): Promise<EmpresaBff | 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}/empresas/${empresaId}`, {
                method: 'GET',
                headers: {
                    'accept': 'application/json',
                    'Authorization': `Bearer ${token}`,
                },
            });

            if (!response.ok) {
                console.error(`❌ Erro ao buscar empresa: ${response.status}`);
                return null;
            }

            const empresa: EmpresaBff = await response.json();
            return empresa;
        } catch (error) {
            console.error('❌ Erro ao buscar empresa:', error);
            return null;
        }
    },

    /**
     * Atualiza dados da empresa
     * @param empresaId - ID da empresa
     * @param dados - Dados para atualizar
     */
    atualizar: async (empresaId: string, dados: Partial<EmpresaBff>): Promise<boolean> => {
        try {
            console.log(`📝 [EmpresaService] Atualizando empresa ${empresaId}:`, dados);
            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}/empresas/${empresaId}`, {
                method: 'PATCH', // ou PUT, dependendo da API. PATCH é mais comum para parciais.
                headers: {
                    'accept': 'application/json',
                    'Content-Type': 'application/json',
                    'Authorization': `Bearer ${token}`,
                },
                body: JSON.stringify(dados),
            });

            if (!response.ok) {
                console.error(`❌ [EmpresaService] Erro ao atualizar empresa: ${response.status}`);
                return false;
            }

            console.log(`✅ [EmpresaService] Empresa ${empresaId} atualizada com sucesso!`);
            return true;
        } catch (error) {
            console.error('❌ [EmpresaService] Erro ao atualizar empresa:', error);
            return false;
        }
    }
};
