/**
 * Função alternativa para extrair empresa_id de forma mais robusta
 * Tenta várias estratégias baseadas na estrutura da resposta do /me
 */

export async function getEmpresaIdRobust(): Promise<string | null> {
  try {
    const token = localStorage.getItem('access_token');
    
    if (!token) {
      console.error('🔑 Token de acesso não encontrado');
      return null;
    }

    console.log('🔍 [ROBUST] Buscando dados do usuário via /me...');

    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('❌ [ROBUST] Erro ao buscar dados do usuário:', response.status, response.statusText);
      return null;
    }

    const userData = await response.json();
    console.log('✅ [ROBUST] Dados completos do usuário:', userData);
    
    // Estratégia 1: Buscar em empresasDados como array de strings
    if (userData.empresasDados && Array.isArray(userData.empresasDados)) {
      console.log('🔍 [ROBUST] empresasDados é um array com', userData.empresasDados.length, 'itens');
      
      // Verificar se o array contém strings (IDs diretos)
      for (let i = 0; i < userData.empresasDados.length; i++) {
        const item = userData.empresasDados[i];
        console.log(`🔍 [ROBUST] Item ${i}:`, item, typeof item);
        
        // Se é uma string diretamente, este é o ID
        if (typeof item === 'string' && item.length > 10 && /^[a-zA-Z0-9]+$/.test(item)) {
          console.log('✅ [ROBUST] Encontrado empresa_id como string direta no array:', item);
          return item;
        }
        
        // Se é um objeto, buscar propriedades
        if (typeof item === 'object' && item !== null) {
          // Buscar propriedade 'id' diretamente
          if (item.id) {
            console.log('✅ [ROBUST] Encontrado empresa_id via item.id:', item.id);
            return item.id;
          }
          
          // Buscar chaves que parecem ser IDs (formato específico)
          const chaves = Object.keys(item);
          for (const chave of chaves) {
            // IDs geralmente têm mais de 10 caracteres alfanuméricos
            if (chave.length > 10 && /^[a-zA-Z0-9]+$/.test(chave)) {
              console.log('✅ [ROBUST] Encontrado empresa_id como chave:', chave);
              return chave;
            }
          }
        }
      }
    }

    // Estratégia 2: Buscar em empresasDados como objeto direto
    if (userData.empresasDados && typeof userData.empresasDados === 'object' && !Array.isArray(userData.empresasDados)) {
      console.log('🔍 [ROBUST] empresasDados é um objeto direto');
      const chaves = Object.keys(userData.empresasDados);
      
      for (const chave of chaves) {
        if (chave.length > 10 && /^[a-zA-Z0-9]+$/.test(chave)) {
          console.log('✅ [ROBUST] Encontrado empresa_id como chave do objeto principal:', chave);
          return chave;
        }
      }
    }

    // Estratégia 3: Buscar em outros campos que possam conter empresa_id
    const possiveisCampos = ['empresa_id', 'empresaId', 'companyId', 'company_id'];
    for (const campo of possiveisCampos) {
      if (userData[campo]) {
        console.log(`✅ [ROBUST] Encontrado empresa_id no campo ${campo}:`, userData[campo]);
        return userData[campo];
      }
    }

    // Estratégia 4: Buscar por qualquer ID que pareça ser de empresa
    console.log('🔍 [ROBUST] Procurando por qualquer ID que pareça ser de empresa...');
    const todasChaves = Object.keys(userData);
    for (const chave of todasChaves) {
      const valor = userData[chave];
      if (typeof valor === 'string' && valor.length > 10 && /^[a-zA-Z0-9]+$/.test(valor)) {
        console.log(`🤔 [ROBUST] Possível empresa_id encontrado em ${chave}:`, valor);
        // Não retorna automaticamente, apenas loga para análise
      }
    }

    console.error('❌ [ROBUST] Nenhuma estratégia conseguiu extrair empresa_id');
    return null;

  } catch (error) {
    console.error('❌ [ROBUST] Erro exception:', error);
    return null;
  }
}