import { messages } from '../../../core/messages/index.js';
import { splitLines } from '../../../shared/helpers/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export function detectarCorrecoesShell(src, _relPath) {
    const correcoes = [];
    const linhas = splitLines(src);
    if (linhas.length > 0 && !linhas[0].startsWith('#!')) {
        correcoes.push({
            tipo: 'shell-add-shebang',
            original: linhas[0] || '(linha vazia)',
            sugerido: '#!/bin/bash',
            linha: 1,
            confianca: 95
        });
    }
    if (!/set\s+(-e|-o\s+pipefail)/.test(src)) {
        correcoes.push({
            tipo: 'shell-add-set-e',
            original: 'Sem set -e',
            sugerido: 'set -euo pipefail',
            linha: 2,
            confianca: 90
        });
    }
    linhas.forEach((linha, index) => {
        const numeroLinha = index + 1;
        if (/\b(echo|ls|cd|rm|cp|mv)\s+.*\$\w+/.test(linha) && !/["'].*\$\w+.*["']/.test(linha)) {
            const fixed = linha.replace(/\$(\w+)/g, '"$1"');
            correcoes.push({
                tipo: 'shell-quote-variables',
                original: linha.trim(),
                sugerido: fixed.trim(),
                linha: numeroLinha,
                confianca: 85
            });
        }
        if (/\beval\s+/.test(linha)) {
            correcoes.push({
                tipo: 'shell-replace-eval',
                original: linha.trim(),
                sugerido: '# Refatore para evitar eval - use arrays ou funções',
                linha: numeroLinha,
                confianca: 70
            });
        }
    });
    return correcoes;
}
export const correctionShell = {
    nome: 'correction-shell',
    categoria: 'infrastructure',
    descricao: 'Correções automáticas para Shell Script',
    test: (relPath) => /\.(sh|bash|zsh|fish)$/i.test(relPath),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const correcoes = detectarCorrecoesShell(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: `[ERRO] ${elem.original}\n[OK] ${elem.sugerido}\nConfiança: ${elem.confianca}%`
        }));
    }
};
//# sourceMappingURL=correction-shell.js.map