import { messages } from '../../../core/messages/index.js';
import { parseDocument } from 'yaml';
import { detectorGitLabCIPerformance } from '../detectors/detector-gitlab-ci-performance.js';
import { detectorGitLabCISecurity } from '../detectors/detector-gitlab-ci-security.js';
export const analistaGitLabCI = {
    nome: 'gitlab-ci',
    categoria: 'workflows',
    descricao: 'Analista avançado de pipelines do GitLab CI',
    test: (relPath) => relPath === '.gitlab-ci.yml' || relPath.endsWith('.gitlab-ci.yml'),
    aplicar: async (conteudo, relPath, _ast = null, _fc, contexto) => {
        const ocorrencias = [];
        try {
            const securityResults = await Promise.resolve(detectorGitLabCISecurity.aplicar(conteudo, relPath, null, _fc, contexto));
            const performanceResults = await Promise.resolve(detectorGitLabCIPerformance.aplicar(conteudo, relPath, null, _fc, contexto));
            ocorrencias.push(...securityResults, ...performanceResults);
            const doc = parseDocument(conteudo);
            const pipeline = doc.toJS();
            if (pipeline) {
                const stages = pipeline.stages || ['build', 'test', 'deploy'];
                void stages;
                for (const [key, value] of Object.entries(pipeline)) {
                    if (['image', 'services', 'stages', 'types', 'before_script', 'after_script', 'variables', 'cache', 'include', 'workflow'].includes(key)) {
                        continue;
                    }
                    const job = value;
                    if (typeof job === 'object' && job !== null && (job.script || job.trigger || job.extends)) {
                        if (Array.isArray(job.script) && job.script.length > 15) {
                            ocorrencias.push({
                                tipo: 'GITLAB_CI_JOB_TOO_LONG',
                                mensagem: messages.AnalistaGitlabCiMensagens.jobScriptMuitoLongo(key, job.script.length),
                                relPath,
                                linha: 1,
                                nivel: 'info',
                                sugestao: 'Considere extrair o script para um arquivo separado ou quebrar em múltiplos jobs/steps'
                            });
                        }
                    }
                }
            }
        }
        catch {
        }
        return ocorrencias;
    }
};
//# sourceMappingURL=analyst-gitlab-ci.js.map