import { messages } from '../../../core/messages/index.js';
import { splitLines } from '../../../shared/helpers/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export function detectarCorrecoesSql(src, _relPath) {
    const correcoes = [];
    const linhas = splitLines(src);
    linhas.forEach((linha, index) => {
        const numeroLinha = index + 1;
        if (/\bselect\s+\*\s+from\b/i.test(linha)) {
            const tableMatch = /from\s+(\w+)/i.exec(linha);
            if (tableMatch) {
                correcoes.push({
                    tipo: 'sql-select-star',
                    original: linha.trim(),
                    sugerido: linha.replace(/\bselect\s+\*\s+from/i, `SELECT coluna1, coluna2 FROM`),
                    linha: numeroLinha,
                    confianca: 60
                });
            }
        }
        if (/^\s*(delete|update)\s+/i.test(linha.trim()) && !/where/i.test(linha)) {
            correcoes.push({
                tipo: 'sql-add-where',
                original: linha.trim(),
                sugerido: `${linha.trim()}\n-- [AVISO] ADICIONE: WHERE condicao = valor`,
                linha: numeroLinha,
                confianca: 90
            });
        }
        if (/\bvarchar\b\s*(\(|\s|$)/i.test(linha) && !/\bvarchar\(\d+\)/i.test(linha)) {
            correcoes.push({
                tipo: 'sql-varchar-size',
                original: linha.trim(),
                sugerido: linha.replace(/\bvarchar\b/gi, 'VARCHAR(255)'),
                linha: numeroLinha,
                confianca: 80
            });
        }
        if (/create\s+table\s+(\w+)/i.test(linha) && !/if\s+not\s+exists/i.test(linha)) {
            correcoes.push({
                tipo: 'sql-add-if-not-exists',
                original: linha.trim(),
                sugerido: linha.replace(/create\s+table\s+/i, 'CREATE TABLE IF NOT EXISTS '),
                linha: numeroLinha,
                confianca: 95
            });
        }
    });
    return correcoes;
}
export const correctionSql = {
    nome: 'correction-sql',
    categoria: 'database',
    descricao: 'Correções automáticas para problemas SQL',
    test: (relPath) => /\.(sql|pgsql|mysql|sqlite)$/i.test(relPath),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const correcoes = detectarCorrecoesSql(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-sql.js.map