import { getMessages } from '../../../core/messages/index.js';
import { splitLines } from '../../../shared/helpers/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export const detectorCssInJsBestPractices = {
    nome: 'detector-css-in-js-best-practices',
    categoria: 'estilo',
    descricao: 'Detecta más práticas em CSS-in-JS',
    test: (relPath) => /\.(js|jsx|ts|tsx|mjs|cjs)$/i.test(relPath),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const m = getMessages();
        const ocorrencias = [];
        const linhas = splitLines(src);
        if (!/styled-components|styled-jsx|emotion|@emotion|css\s*`|css\(/i.test(src)) {
            return ocorrencias;
        }
        linhas.forEach((linha, index) => {
            const numeroLinha = index + 1;
            if (/createGlobalStyle|<style[^>]*global/i.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'css-in-js-global-styles',
                    nivel: 'aviso',
                    mensagem: m.CssInJsMensagens.detectorGlobalStyles,
                    relPath,
                    linha: numeroLinha,
                    sugestao: m.CssInJsMensagens.sugestaoEvitarGlobalStyles
                }));
            }
            if (/!important/.test(linha) && /styled|css\s*`|css\(/i.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'css-in-js-important',
                    nivel: 'info',
                    mensagem: m.CssInJsMensagens.importantDetected,
                    relPath,
                    linha: numeroLinha,
                    sugestao: m.CssInJsMensagens.sugestaoEspecificidade
                }));
            }
            if (/url\(\s*['"]?http:\/\//i.test(linha) && /styled|css\s*`|css\(/i.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'css-in-js-http-url',
                    nivel: 'aviso',
                    mensagem: m.CssInJsMensagens.httpUrlDetected,
                    relPath,
                    linha: numeroLinha,
                    sugestao: m.CssInJsMensagens.sugestaoHttps
                }));
            }
            if (/className=.*style=\{/.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'css-in-js-mixed-styling',
                    nivel: 'info',
                    mensagem: m.CssInJsMensagens.mixedStyling,
                    relPath,
                    linha: numeroLinha,
                    sugestao: m.CssInJsMensagens.sugestaoMixedStyling
                }));
            }
        });
        return ocorrencias;
    }
};
//# sourceMappingURL=detector-css-in-js-best-practices.js.map