import { messages } from '../../../core/messages/index.js';
import { splitLines } from '../../../shared/helpers/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export function detectarCorrecoesJenkins(src, _relPath) {
    const correcoes = [];
    const linhas = splitLines(src);
    linhas.forEach((linha, index) => {
        const numeroLinha = index + 1;
        if (/\bsh\s+['"].*sudo\b/i.test(linha)) {
            correcoes.push({
                tipo: 'jenkins-fix-sudo',
                original: linha,
                sugerido: linha.replace(/\bsudo\s+/g, ''),
                linha: numeroLinha,
                confianca: 85
            });
        }
        if (/\b(password|token|secret)\s*=\s*['"][^$({][^'"]{5,}['"]/i.test(linha)) {
            const replaced = linha.replace(/['"][^'"]+['"]/, "credentials('CREDENTIALS_ID')");
            correcoes.push({
                tipo: 'jenkins-use-credentials',
                original: linha,
                sugerido: replaced,
                linha: numeroLinha,
                confianca: 90
            });
        }
    });
    if (!/timeout\s*\(.*\)/i.test(src) && /pipeline\s*\{/i.test(src)) {
        correcoes.push({
            tipo: 'jenkins-add-timeout',
            original: '',
            sugerido: 'options { timeout(time: 30, unit: \'MINUTES\') }',
            linha: 1,
            confianca: 85
        });
    }
    if (!/cleanWs\s*\(\)/i.test(src) && !/deleteDir\s*\(\)/i.test(src)) {
        const postIdx = linhas.findIndex(l => /^\s*post\s*\{/.test(l));
        if (postIdx >= 0) {
            correcoes.push({
                tipo: 'jenkins-add-cleanws',
                original: linhas[postIdx],
                sugerido: `${linhas[postIdx]}\n    always {\n      cleanWs()\n    }`,
                linha: postIdx + 1,
                confianca: 85
            });
        }
        else {
            correcoes.push({
                tipo: 'jenkins-add-cleanws',
                original: linhas[linhas.length - 1] || '',
                sugerido: `${linhas[linhas.length - 1] || ''}\n  post {\n    always {\n      cleanWs()\n    }\n  }`,
                linha: linhas.length,
                confianca: 80
            });
        }
    }
    return correcoes;
}
export const correctionJenkins = {
    nome: 'correction-jenkins',
    categoria: 'workflows',
    descricao: 'Correções automáticas para Jenkins',
    test: (relPath) => relPath.toLowerCase().includes('jenkinsfile'),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const correcoes = detectarCorrecoesJenkins(src, relPath);
        return correcoes.map(elem => criarOcorrencia({
            tipo: `correction-${elem.tipo}`,
            nivel: elem.confianca > 85 ? 'aviso' : 'info',
            mensagem: messages.SharedCommonMensagens.correcaoSugerida(elem.tipo),
            relPath,
            linha: elem.linha,
            sugestao: ` ${elem.original}\n ${elem.sugerido}\nConfiança: ${elem.confianca}%`,
            correcao: {
                original: elem.original,
                novo: elem.sugerido,
                linha: elem.linha
            }
        }));
    }
};
//# sourceMappingURL=correction-jenkins.js.map