/**
 * 🧪 TESTE DO ANGULAR API ANALYZER - Console do Navegador
 * 
 * Para usar no console do navegador quando a aplicação estiver rodando:
 * 
 * 1. Abra o DevTools (F12)
 * 2. Vá para a aba Console 
 * 3. Cole este código e execute
 * 4. Use: await testApiAnalyzer('vehicles')
 */

// 🎯 FUNÇÃO PARA TESTAR NO CONSOLE DO NAVEGADOR
async function testApiAnalyzer(domainName: string) {
  console.log(`🚀 TESTANDO API ANALYZER AUTENTICADO PARA: ${domainName}`);
  console.log('='.repeat(60));
  
  // Obter a instância do Angular (assumindo que está disponível globalmente)
  const angularEl = document.querySelector('app-root');
  if (!angularEl) {
    console.error('❌ Elemento app-root não encontrado');
    return;
  }
  
  // Simular injeção do serviço (versão simplificada)
  const httpClient = (window as any).ng?.getInjector?.(angularEl)?.get?.('HttpClient');
  if (!httpClient) {
    console.error('❌ HttpClient não encontrado. Certifique-se de que a aplicação está rodando.');
    return;
  }
  
  // Criar analisador manual (sem injeção de dependência)
  const analyzer = {
    async analyzeAPI(domain: string) {
      console.log(`🔍 Analisando domínio: ${domain}`);
      
      const endpoints = [
        `${domain}?page=1&limit=1`,
        `${domain}s?page=1&limit=1`,
        `api/v1/${domain}?page=1&limit=1`,
        `api/v1/${domain}s?page=1&limit=1`
      ];
      
      for (const endpoint of endpoints) {
        try {
          console.log(`🔍 Testando: ${endpoint}`);
          
          // Fazer requisição usando HttpClient do Angular
          const response = await new Promise((resolve, reject) => {
            httpClient.get(endpoint).subscribe({
              next: (data: any) => resolve(data),
              error: (error: any) => reject(error)
            });
          });
          
          if (response && (response as any).data && Array.isArray((response as any).data) && (response as any).data.length > 0) {
            const sample = (response as any).data[0];
            console.log(`✅ DADOS REAIS ENCONTRADOS!`);
            console.log(`📊 Campos: ${Object.keys(sample).length}`);
            console.log(`📦 Total: ${(response as any).totalCount || 'N/A'}`);
            console.log(`🔗 Endpoint: ${endpoint}`);
            
            console.log('\n📝 CAMPOS DETECTADOS:');
            Object.entries(sample).forEach(([key, value]) => {
              const type = typeof value;
              const preview = type === 'string' ? (value as string).substring(0, 30) + '...' : value;
              console.log(`  - ${key} (${type}): ${preview}`);
            });
            
            console.log('\n📄 INTERFACE TYPESCRIPT:');
            console.log(this.generateInterface(domain, sample));
            
            return {
              success: true,
              endpoint,
              fields: Object.keys(sample).length,
              sample,
              response
            };
          } else {
            console.log(`⚠️ Endpoint sem dados: ${endpoint}`);
          }
          
        } catch (error) {
          console.log(`❌ Erro em ${endpoint}:`, (error as any).message);
        }
      }
      
      return { success: false };
    },
    
    generateInterface(domain: string, sample: any): string {
      const className = domain.charAt(0).toUpperCase() + domain.slice(1);
      let interfaceCode = `/**\n * 🎯 ${className} Interface - DADOS REAIS DA API\n */\nexport interface ${className} {\n`;
      
      Object.entries(sample).forEach(([key, value]) => {
        const type = this.getTypeScript(value);
        const optional = value === null || value === undefined ? '?' : '';
        interfaceCode += `  ${key}${optional}: ${type};\n`;
      });
      
      interfaceCode += '}';
      return interfaceCode;
    },
    
    getTypeScript(value: any): string {
      if (value === null || value === undefined) return 'any';
      const type = typeof value;
      if (type === 'string') return 'string';
      if (type === 'number') return 'number';
      if (type === 'boolean') return 'boolean';
      if (Array.isArray(value)) return 'any[]';
      if (type === 'object') return 'any';
      return 'any';
    }
  };
  
  return await analyzer.analyzeAPI(domainName);
}

// 🚀 EXPORTAR PARA USO NO CONSOLE
if (typeof window !== 'undefined') {
  (window as any).testApiAnalyzer = testApiAnalyzer;
  console.log('🎯 API Analyzer disponível! Use: testApiAnalyzer("vehicles")');
}

export { testApiAnalyzer }; 