import { messages } from '../../../core/messages/index.js';
import { splitLines } from '../../../shared/helpers/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export function detectarCorrecoesCircleCI(src, _relPath) {
    const correcoes = [];
    const linhas = splitLines(src);
    linhas.forEach((linha, index) => {
        const numeroLinha = index + 1;
        if (/\bimage:\s*[^\s@]+:latest\b/.test(linha)) {
            correcoes.push({
                tipo: 'circleci-fix-latest-image',
                original: linha,
                sugerido: linha.replace(/:latest\b/, ':3.18'),
                linha: numeroLinha,
                confianca: 90
            });
        }
        if (/\b(TOKEN|SECRET|PASSWORD|KEY|ACCESS_KEY)\b.*:\s*['"][^'"]+['"]/i.test(linha) && !/\$/.test(linha)) {
            const replaced = linha.replace(/['"][^'"]+['"]/, '"$VAR_NAME"');
            correcoes.push({
                tipo: 'circleci-use-context',
                original: linha,
                sugerido: replaced,
                linha: numeroLinha,
                confianca: 90
            });
        }
    });
    if (!/save_cache:/.test(src) && !/restore_cache:/.test(src)) {
        const firstJobLine = linhas.findIndex(l => /steps:/.test(l));
        const targetLine = firstJobLine >= 0 ? firstJobLine : 0;
        correcoes.push({
            tipo: 'circleci-add-cache',
            original: linhas[targetLine],
            sugerido: `      - restore_cache:\n          key: deps-{{ checksum "package-lock.json" }}\n${linhas[targetLine]}\n      - save_cache:\n          key: deps-{{ checksum "package-lock.json" }}\n          paths:\n            - node_modules`,
            linha: targetLine + 1,
            confianca: 80
        });
    }
    return correcoes;
}
export const correctionCircleCI = {
    nome: 'correction-circleci',
    categoria: 'workflows',
    descricao: 'Correções automáticas para CircleCI',
    test: (relPath) => relPath.endsWith('.circleci/config.yml'),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const correcoes = detectarCorrecoesCircleCI(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-circleci.js.map