import { detectarContextoInteligente } from '../js-ts/detectors/index.js';
import { messages } from '../../core/messages/index.js';
const log = messages.log;
export const analistaSugestoesContextuais = {
    nome: 'sugestoes-contextuais',
    categoria: 'estrategia',
    descricao: 'Gera sugestões específicas baseadas no contexto real do projeto detectado',
    global: true,
    async aplicar(_src, _relPath, _ast, _fullPath, contexto) {
        const ocorrencias = [];
        if (!contexto) {
            return ocorrencias;
        }
        try {
            let packageJson;
            try {
                const pkgArquivo = contexto.arquivos?.find(arquivo => arquivo.relPath === 'package.json');
                if (pkgArquivo?.content) {
                    packageJson = JSON.parse(pkgArquivo.content);
                }
            }
            catch {
            }
            const estruturaDetectada = Array.from(new Set(contexto.arquivos.map(arquivo => arquivo.relPath.includes('/') ? arquivo.relPath.split('/')[0] : '').filter(dir => dir && dir !== '.')));
            const resultados = detectarContextoInteligente(estruturaDetectada, contexto.arquivos, packageJson);
            if (resultados.length === 0) {
                ocorrencias.push({
                    tipo: 'sugestoes_arquitetura',
                    nivel: 'info',
                    mensagem: messages.SugestoesContextuaisMensagens.arquetipoNaoIdentificado,
                    relPath: '',
                    linha: 0
                });
                return ocorrencias;
            }
            const melhorResultado = resultados[0];
            const confiancaPercent = Math.round(melhorResultado.confiancaTotal * 100);
            ocorrencias.push({
                tipo: 'identificacao_projeto',
                nivel: 'info',
                mensagem: messages.SugestoesContextuaisMensagens.projetoIdentificado(melhorResultado.tecnologia, confiancaPercent),
                relPath: '',
                linha: 0,
                detalhes: {
                    tecnologia: melhorResultado.tecnologia,
                    confianca: melhorResultado.confiancaTotal,
                    evidencias: melhorResultado.evidencias.length
                }
            });
            for (const sugestao of melhorResultado.sugestoesMelhoria || []) {
                ocorrencias.push({
                    tipo: 'sugestao_melhoria',
                    nivel: 'info',
                    mensagem: sugestao,
                    relPath: '',
                    linha: 0,
                    detalhes: {
                        tecnologia: melhorResultado.tecnologia,
                        categoria: 'melhoria'
                    }
                });
            }
            for (const problema of melhorResultado.problemasDetectados || []) {
                ocorrencias.push({
                    tipo: 'problema_seguranca',
                    nivel: 'aviso',
                    mensagem: problema,
                    relPath: '',
                    linha: 0,
                    detalhes: {
                        tecnologia: melhorResultado.tecnologia,
                        categoria: 'problema'
                    }
                });
            }
            const evidenciasTop = melhorResultado.evidencias.filter(erro => erro.confianca > 0.8).slice(0, 5);
            for (const evidencia of evidenciasTop) {
                let mensagem = '';
                const nivel = 'info';
                switch (evidencia.tipo) {
                    case 'dependencia':
                        mensagem = messages.SugestoesContextuaisMensagens.evidenciaDependencia(evidencia.valor, melhorResultado.tecnologia);
                        break;
                    case 'import':
                        mensagem = messages.SugestoesContextuaisMensagens.evidenciaImport(evidencia.valor, evidencia.localizacao);
                        break;
                    case 'codigo':
                        mensagem = messages.SugestoesContextuaisMensagens.evidenciaCodigo(evidencia.localizacao);
                        break;
                    case 'estrutura':
                        mensagem = messages.SugestoesContextuaisMensagens.evidenciaEstrutura(evidencia.valor, melhorResultado.tecnologia);
                        break;
                    default:
                        continue;
                }
                ocorrencias.push({
                    tipo: 'evidencia_contextual',
                    nivel,
                    mensagem,
                    relPath: evidencia.localizacao || '',
                    linha: 0,
                    detalhes: {
                        tecnologia: melhorResultado.tecnologia,
                        tipoEvidencia: evidencia.tipo,
                        confianca: evidencia.confianca
                    }
                });
            }
            if (resultados.length > 1) {
                const alternativas = resultados.slice(1, 3).map(raiz => `${raiz.tecnologia} (${Math.round(raiz.confiancaTotal * 100)}%)`).join(', ');
                ocorrencias.push({
                    tipo: 'tecnologias_alternativas',
                    nivel: 'info',
                    mensagem: messages.SugestoesContextuaisMensagens.tecnologiasAlternativas(alternativas),
                    relPath: '',
                    linha: 0,
                    detalhes: {
                        alternativas: resultados.slice(1, 3)
                    }
                });
            }
        }
        catch (error) {
            log.aviso(messages.SugestoesContextuaisMensagens.erroAnaliseContextual(error instanceof Error ? error.message : String(error)));
            ocorrencias.push({
                tipo: 'erro_analise',
                nivel: 'aviso',
                mensagem: messages.SugestoesContextuaisMensagens.erroDuranteAnalise,
                relPath: '',
                linha: 0
            });
        }
        return ocorrencias;
    }
};
//# sourceMappingURL=suggestions-contextuais.js.map