/**
 * 🧪 TESTE DE API COM DADOS REAIS - Console do Navegador
 * 
 * INSTRUÇÕES DE USO:
 * 1. Abra a aplicação Angular no navegador (localhost:4200)
 * 2. Faça login normalmente
 * 3. Abra DevTools (F12) → Console
 * 4. Cole este código e execute
 * 5. Execute: testRealAPI('vehicles')
 */

async function testRealAPI(domainName) {
  console.log(`🚀 TESTANDO API REAL PARA: ${domainName.toUpperCase()}`);
  console.log('='.repeat(60));
  
  // Obter token e tenant do localStorage (como a aplicação faz)
  const token = localStorage.getItem('prafrota_auth_token');
  const tenantId = localStorage.getItem('tenant_id');
  
  if (!token) {
    console.error('❌ Token não encontrado. Faça login primeiro!');
    return;
  }
  
  if (!tenantId) {
    console.error('❌ Tenant ID não encontrado. Verifique se está logado corretamente.');
    return;
  }
  
  console.log('✅ Token encontrado:', token.substring(0, 20) + '...');
  console.log('✅ Tenant ID:', tenantId);
  
  // URLs para testar (baseado na estrutura da API)
  const baseUrl = 'https://prafrota-be-bff-tenant-api.grupopra.tech';
  const endpoints = [
    `${domainName}?page=1&limit=1`,
    `${domainName}s?page=1&limit=1`,
    `api/v1/${domainName}?page=1&limit=1`,
    `api/v1/${domainName}s?page=1&limit=1`
  ];
  
  // Headers necessários (igual ao auth interceptor)
  const headers = {
    'x-tenant-user-auth': token,
    'x-tenant-uuid': tenantId,
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  };
  
  for (const endpoint of endpoints) {
    const fullUrl = `${baseUrl}/${endpoint}`;
    console.log(`\n🔍 Testando: ${endpoint}`);
    
    try {
      const response = await fetch(fullUrl, {
        method: 'GET',
        headers: headers
      });
      
      console.log(`📊 Status: ${response.status} ${response.statusText}`);
      
      if (response.ok) {
        const data = await response.json();
        
        if (data && data.data && Array.isArray(data.data) && data.data.length > 0) {
          const sample = data.data[0];
          
          console.log('🎉 DADOS REAIS ENCONTRADOS!');
          console.log(`📊 Total de registros: ${data.totalCount || 'N/A'}`);
          console.log(`📦 Registros na página: ${data.data.length}`);
          console.log(`📋 Campos no primeiro registro: ${Object.keys(sample).length}`);
          
          console.log('\n📝 ESTRUTURA DO PRIMEIRO REGISTRO:');
          Object.entries(sample).forEach(([key, value]) => {
            const type = typeof value;
            let preview = value;
            
            // Limitar preview para strings longas
            if (type === 'string' && value.length > 50) {
              preview = value.substring(0, 50) + '...';
            } else if (type === 'object' && value !== null) {
              preview = Array.isArray(value) ? `Array(${value.length})` : 'Object';
            }
            
            console.log(`  ${key}: ${type} = ${preview}`);
          });
          
          console.log('\n📄 INTERFACE TYPESCRIPT GERADA:');
          console.log(generateTypescriptInterface(domainName, sample));
          
          console.log('\n✅ SUCESSO! Endpoint funcionando com dados reais.');
          return {
            success: true,
            endpoint: fullUrl,
            totalCount: data.totalCount,
            fields: Object.keys(sample),
            sample: sample
          };
          
        } else {
          console.log('⚠️ Resposta OK mas sem dados válidos');
          console.log('📋 Estrutura da resposta:', Object.keys(data));
        }
        
      } else {
        const errorText = await response.text();
        console.log('❌ Erro na resposta:', errorText.substring(0, 200));
      }
      
    } catch (error) {
      console.log('❌ Erro na requisição:', error.message);
    }
  }
  
  console.log('\n❌ Nenhum endpoint retornou dados válidos');
  return { success: false };
}

function generateTypescriptInterface(domainName, sample) {
  const className = domainName.charAt(0).toUpperCase() + domainName.slice(1);
  let interfaceCode = `/**
 * 🎯 ${className} Interface - DADOS REAIS DA API PraFrota
 * 
 * ✨ Auto-gerado a partir de dados reais da API autenticada
 * 📅 Gerado em: ${new Date().toLocaleString()}
 */
export interface ${className} {\n`;

  Object.entries(sample).forEach(([key, value]) => {
    const type = getTypeScriptType(value);
    const optional = value === null || value === undefined ? '?' : '';
    const description = getFieldDescription(key);
    
    interfaceCode += `  ${key}${optional}: ${type}; // ${description}\n`;
  });
  
  interfaceCode += '}';
  return interfaceCode;
}

function getTypeScriptType(value) {
  if (value === null || value === undefined) return 'any';
  
  const type = typeof value;
  
  if (type === 'string') {
    // Detectar datas ISO
    if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(value)) return 'string'; // Date
    return 'string';
  }
  
  if (type === 'number') return 'number';
  if (type === 'boolean') return 'boolean';
  
  if (Array.isArray(value)) {
    if (value.length === 0) return 'any[]';
    return `${getTypeScriptType(value[0])}[]`;
  }
  
  if (type === 'object') return 'any';
  
  return 'any';
}

function getFieldDescription(fieldName) {
  const descriptions = {
    id: 'Identificador único',
    name: 'Nome',
    email: 'Email',
    phone: 'Telefone', 
    status: 'Status',
    active: 'Ativo',
    created_at: 'Data criação',
    updated_at: 'Data atualização',
    company_id: 'ID empresa',
    user_id: 'ID usuário',
    description: 'Descrição'
  };
  
  return descriptions[fieldName] || `Campo ${fieldName}`;
}

// 🎯 TESTES RÁPIDOS PARA DOMÍNIOS CONHECIDOS
async function testAllDomains() {
  console.log('🚀 TESTANDO TODOS OS DOMÍNIOS CONHECIDOS');
  console.log('='.repeat(60));
  
  const domains = ['vehicle', 'driver', 'company', 'user', 'route'];
  const results = [];
  
  for (const domain of domains) {
    console.log(`\n${'='.repeat(40)}`);
    const result = await testRealAPI(domain);
    results.push({ domain, success: result.success });
    
    // Pausa entre requisições
    await new Promise(resolve => setTimeout(resolve, 1000));
  }
  
  console.log('\n📊 RESUMO DOS TESTES:');
  results.forEach(({ domain, success }) => {
    console.log(`${success ? '✅' : '❌'} ${domain}`);
  });
  
  return results;
}

// Tornar funções disponíveis globalmente
window.testRealAPI = testRealAPI;
window.testAllDomains = testAllDomains;

console.log(`
🎯 FERRAMENTAS DE TESTE CARREGADAS!

📋 USO:
• testRealAPI('vehicles')     - Testar um domínio específico
• testAllDomains()           - Testar todos os domínios

📌 REQUISITOS:
• Estar logado na aplicação Angular
• Ter token válido no localStorage
• Estar na mesma aba da aplicação
`); 