/** * Utilidades para autenticação e dados do usuário */ export interface UserMeResponse { id: string; identificacao: string; ativo: boolean; superadmin: boolean; 'auth-id-appwrite': string | null; nome: string; email: string; nivel: string; 'registro-completo': boolean; enderecos: any[]; empresasDados: string[]; // ← Corrigido: é um array de strings (IDs diretos) 'nome-social': string; cpf: string; createdAt: string; updatedAt: string; } /** * Busca os dados do usuário logado através do endpoint /me * @returns Promise com os dados do usuário ou null se erro */ export async function getUserMeData(): Promise { try { const token = localStorage.getItem('access_token'); if (!token) { console.error('🔑 Token de acesso não encontrado'); return null; } const response = await fetch(`${process.env.NEXT_PUBLIC_BFF_API_URL}/auth/me`, { method: 'GET', headers: { 'Accept': 'application/json', 'Authorization': `Bearer ${token}`, }, }); if (!response.ok) { console.error('❌ Erro ao buscar dados do usuário:', response.status, response.statusText); return null; } const userData = await response.json(); return userData; } catch (error) { console.error('❌ Erro exception ao buscar dados do usuário:', error); return null; } } /** * Extrai o empresa_id dos dados do usuário * @param userData - Dados do usuário do endpoint /me * @returns string com o empresa_id ou null se não encontrado */ export function extractEmpresaId(userData: UserMeResponse | null): string | null { if (!userData) { console.error('❌ Dados do usuário não fornecidos'); return null; } // Verifica se há empresas associadas if (!userData.empresasDados) { console.error('❌ empresasDados não encontrado'); return null; } // empresasDados deve ser um array de strings (IDs diretos) if (Array.isArray(userData.empresasDados)) { if (userData.empresasDados.length === 0) { console.error('❌ Array empresasDados está vazio'); return null; } // Pega o primeiro ID do array const primeiroEmpresaId = userData.empresasDados[0]; if (typeof primeiroEmpresaId === 'string' && primeiroEmpresaId.length > 0) { return primeiroEmpresaId; } else { console.error('❌ Primeiro item do array não é uma string válida:', primeiroEmpresaId); return null; } } else { console.error('❌ empresasDados não é um array:', typeof userData.empresasDados); return null; } } /** * Busca e retorna o empresa_id do usuário logado * @returns Promise - O ID da empresa ou null se erro */ export async function getCurrentUserEmpresaId(): Promise { try { const userData = await getUserMeData(); if (!userData) { console.error('❌ Falha ao obter dados do usuário do endpoint /me'); return null; } const empresaId = extractEmpresaId(userData); if (!empresaId) { console.error('❌ Falha ao extrair empresa_id dos dados do usuário'); return null; } return empresaId; } catch (error) { console.error('❌ Erro exception ao obter empresa_id do usuário:', error); return null; } }