import { parseDocument } from 'yaml';
import { criarOcorrencia } from '../../../types/index.js';
export const detectorCircleCIEstrutura = {
    nome: 'detector-circleci-estrutura',
    categoria: 'workflows',
    descricao: 'Detecta problemas estruturais em CircleCI configs',
    test: (relPath) => relPath.endsWith('.circleci/config.yml'),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const ocorrencias = [];
        try {
            const doc = parseDocument(src);
            const config = doc.toJS();
            if (!config)
                return ocorrencias;
            const jobs = config;
            if (jobs.jobs) {
                for (const [jobName, job] of Object.entries(jobs.jobs)) {
                    if (job.steps && job.steps.length <= 1) {
                        ocorrencias.push(criarOcorrencia({
                            tipo: 'circleci-job-vazio',
                            nivel: 'info',
                            mensagem: `Job '${jobName}' possui apenas 1 step`,
                            relPath, linha: 1,
                            sugestao: 'Considere remover jobs sem operações significativas'
                        }));
                    }
                    if (job.parallelism && job.parallelism > 10) {
                        ocorrencias.push(criarOcorrencia({
                            tipo: 'circleci-parallelism-excessivo',
                            nivel: 'info',
                            mensagem: `Job '${jobName}' com parallelism=${job.parallelism} pode ser excessivo`,
                            relPath, linha: 1,
                            sugestao: 'Ajuste o parallelism baseado na quantidade real de testes'
                        }));
                    }
                }
                const jobNames = Object.keys(jobs.jobs);
                if (jobNames.length > 3) {
                    const hasWorkflows = config.workflows;
                    if (!hasWorkflows) {
                        ocorrencias.push(criarOcorrencia({
                            tipo: 'circleci-sem-workflows',
                            nivel: 'aviso',
                            mensagem: 'Múltiplos jobs sem seção workflows organizando a execução',
                            relPath, linha: 1,
                            sugestao: 'Adicione a seção workflows para definir a ordem e dependências entre jobs'
                        }));
                    }
                }
            }
        }
        catch { }
        return ocorrencias;
    }
};
//# sourceMappingURL=detector-circleci-structure.js.map