/**
 * 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<UserMeResponse | null> {
  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<string | null> - O ID da empresa ou null se erro
 */
export async function getCurrentUserEmpresaId(): Promise<string | null> {
  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;
  }
}