import { messages } from '../../../core/messages/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export const detectorGitLabCIPerformance = {
    nome: 'detector-gitlab-ci-performance',
    categoria: 'performance',
    descricao: 'Detecta problemas de performance em GitLab CI pipelines',
    test: (relPath) => relPath.endsWith('.gitlab-ci.yml'),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const ocorrencias = [];
        const linhas = src.split('\n');
        if (!/cache:/.test(src)) {
            ocorrencias.push(criarOcorrencia({
                tipo: 'gitlab-ci-missing-cache',
                nivel: 'aviso',
                mensagem: messages.AnalistaGitlabCiMensagens.semCache,
                relPath,
                linha: 1,
                sugestao: 'Use cache para dependências (ex: node_modules, .cache) para acelerar o pipeline'
            }));
        }
        if (!/interruptible:/.test(src)) {
            ocorrencias.push(criarOcorrencia({
                tipo: 'gitlab-ci-missing-interruptible',
                nivel: 'info',
                mensagem: messages.AnalistaGitlabCiMensagens.semInterruptible,
                relPath,
                linha: 1,
                sugestao: 'Adicione interruptible: true para cancelar pipelines antigos quando um novo push ocorrer'
            }));
        }
        linhas.forEach((linha, index) => {
            const numeroLinha = index + 1;
            if (/artifacts:/.test(linha)) {
                const nextLines = src.split('\n').slice(index, index + 5).join('\n');
                if (!/expire_in:/.test(nextLines)) {
                    ocorrencias.push(criarOcorrencia({
                        tipo: 'gitlab-ci-artifacts-no-expiration',
                        nivel: 'info',
                        mensagem: messages.AnalistaGitlabCiMensagens.artifactsSemExpiracao,
                        relPath,
                        linha: numeroLinha,
                        sugestao: 'Adicione expire_in: (ex: 1 week) para economizar storage no GitLab'
                    }));
                }
            }
        });
        return ocorrencias;
    }
};
//# sourceMappingURL=detector-gitlab-ci-performance.js.map