import { messages } from '../../../core/messages/index.js';
import { splitLines } from '../../../shared/helpers/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export const detectorCssBestPractices = {
    nome: 'detector-css-best-practices',
    categoria: 'estilo',
    descricao: 'Detecta más práticas em CSS/SCSS/SASS',
    test: (relPath) => /\.(css|scss|sass)$/i.test(relPath),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const ocorrencias = [];
        const linhas = splitLines(src);
        let depth = 0;
        const propsInBlock = new Map();
        linhas.forEach((linha, index) => {
            const numeroLinha = index + 1;
            const trimmed = linha.trim();
            if (trimmed.includes('{'))
                depth++;
            if (trimmed.includes('}')) {
                if (propsInBlock.size === 0 && depth > 0) {
                    ocorrencias.push(criarOcorrencia({
                        tipo: 'css-empty-rule',
                        nivel: 'info',
                        mensagem: messages.DetectorCssMensagens.emptyRule,
                        relPath,
                        linha: numeroLinha,
                        sugestao: messages.DetectorCssMensagens.emptyRuleSugestao
                    }));
                }
                propsInBlock.clear();
                depth--;
            }
            if (/!important/.test(trimmed)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'css-important-usage',
                    nivel: 'aviso',
                    mensagem: messages.DetectorCssMensagens.important,
                    relPath,
                    linha: numeroLinha,
                    sugestao: messages.DetectorCssMensagens.importantSugestao
                }));
            }
            const propMatch = /^([a-zA-Z-]+)\s*:\s*([^;]+)?/.exec(trimmed);
            if (propMatch && depth > 0) {
                const prop = propMatch[1].toLowerCase();
                const value = (propMatch[2] || '').trim();
                if (propsInBlock.has(prop)) {
                    ocorrencias.push(criarOcorrencia({
                        tipo: 'css-duplicate-property',
                        nivel: 'aviso',
                        mensagem: messages.DetectorCssMensagens.duplicateProperty(prop),
                        relPath,
                        linha: numeroLinha,
                        sugestao: messages.DetectorCssMensagens.duplicatePropertySugestao
                    }));
                }
                propsInBlock.set(prop, { line: numeroLinha, value });
            }
            if (/#[a-zA-Z0-9_-]+\s*\{/.test(trimmed)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'css-id-selector',
                    nivel: 'info',
                    mensagem: messages.DetectorCssMensagens.idSelector,
                    relPath,
                    linha: numeroLinha,
                    sugestao: messages.DetectorCssMensagens.idSelectorSugestao
                }));
            }
            if (/\\9|\*property|_property|expression\s*\(/.test(trimmed)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'css-hack',
                    nivel: 'aviso',
                    mensagem: messages.DetectorCssMensagens.cssHack,
                    relPath,
                    linha: numeroLinha,
                    sugestao: messages.DetectorCssMensagens.cssHackSugestao
                }));
            }
        });
        return ocorrencias;
    }
};
//# sourceMappingURL=detector-css-best-practices.js.map