import { parseDocument } from 'yaml';
import { detectorCircleCIPerformance } from '../detectors/detector-circleci-performance.js';
import { detectorCircleCISecurity } from '../detectors/detector-circleci-security.js';
export const analistaCircleCI = {
    nome: 'circleci',
    categoria: 'workflows',
    descricao: 'Analista de configurações do CircleCI',
    test: (relPath) => relPath === '.circleci/config.yml' || relPath.endsWith('.circleci/config.yml'),
    aplicar: async (conteudo, relPath, _ast = null, _fc, contexto) => {
        const ocorrencias = [];
        try {
            const securityResults = await Promise.resolve(detectorCircleCISecurity.aplicar(conteudo, relPath, null, _fc, contexto));
            const performanceResults = await Promise.resolve(detectorCircleCIPerformance.aplicar(conteudo, relPath, null, _fc, contexto));
            ocorrencias.push(...securityResults, ...performanceResults);
            const doc = parseDocument(conteudo);
            const config = doc.toJS();
            if (config) {
                const configData = config;
                if (configData.version && parseFloat(String(configData.version)) < 2.1) {
                    ocorrencias.push({
                        tipo: 'CIRCLECI_OBSOLETE_VERSION',
                        mensagem: `Versão do CircleCI (${configData.version}) está obsoleta`,
                        relPath,
                        linha: 1,
                        nivel: 'aviso',
                        sugestao: 'Atualize para a versão 2.1 para usar Orbs, Commands e outras melhorias modernas'
                    });
                }
                if (configData.jobs) {
                    for (const [jobName, job] of Object.entries(configData.jobs)) {
                        if (job.steps && job.steps.length > 20) {
                            ocorrencias.push({
                                tipo: 'CIRCLECI_JOB_TOO_MANY_STEPS',
                                mensagem: `Job '${jobName}' possui muitos steps (${job.steps.length})`,
                                relPath,
                                linha: 1,
                                nivel: 'info',
                                sugestao: 'Agrupe steps repetitivos em "commands" para maior legibilidade'
                            });
                        }
                    }
                }
            }
        }
        catch {
        }
        return ocorrencias;
    }
};
//# sourceMappingURL=analyst-circleci.js.map