import { messages } from '../../../core/messages/index.js';
import { splitLines } from '../../../shared/helpers/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export function detectarCorrecoesSvg(src, _relPath) {
    const correcoes = [];
    const linhas = splitLines(src);
    if (!/\bviewBox\s*=\s*['"][^'"]+['"]/i.test(src)) {
        const svgMatch = src.match(/<svg\b([^>]*)>/i);
        if (svgMatch) {
            const widthMatch = svgMatch[1].match(/width\s*=\s*['"](\d+)['"]/);
            const heightMatch = svgMatch[1].match(/height\s*=\s*['"](\d+)['"]/);
            const dimensaoLargura = widthMatch ? widthMatch[1] : '100';
            const hash = heightMatch ? heightMatch[1] : '100';
            correcoes.push({
                tipo: 'svg-add-viewbox',
                original: '<svg ...>',
                sugerido: `<svg viewBox="0 0 ${dimensaoLargura} ${hash}" ...>`,
                linha: 1,
                confianca: 90
            });
        }
    }
    linhas.forEach((linha, index) => {
        const numeroLinha = index + 1;
        if (/<script\b/i.test(linha)) {
            correcoes.push({
                tipo: 'svg-remove-script',
                original: linha.trim(),
                sugerido: '<!-- Script removido por segurança -->',
                linha: numeroLinha,
                confianca: 95
            });
        }
        if (/\son\w+\s*=\s*['"][^'"]*['"]/i.test(linha)) {
            correcoes.push({
                tipo: 'svg-remove-handler',
                original: linha.trim(),
                sugerido: linha.replace(/\son\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi, ''),
                linha: numeroLinha,
                confianca: 90
            });
        }
        if (/javascript\s*:/i.test(linha)) {
            correcoes.push({
                tipo: 'svg-remove-javascript-url',
                original: linha.trim(),
                sugerido: linha.replace(/javascript\s*:[^'"]*/gi, '#'),
                linha: numeroLinha,
                confianca: 95
            });
        }
    });
    return correcoes;
}
export const correctionSvg = {
    nome: 'correction-svg',
    categoria: 'assets',
    descricao: 'Correções automáticas para SVG',
    test: (relPath) => /\.svg$/i.test(relPath),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const correcoes = detectarCorrecoesSvg(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-svg.js.map