import { ICONES_ARQUIVO, ICONES_DIAGNOSTICO, ICONES_FEEDBACK } from '../../shared/icons.js';
export const PRIORIDADES = {
    PROBLEMA_SEGURANCA: {
        prioridade: 'critica',
        icone: '[LOCK]',
        descricao: 'Security vulnerability detected'
    },
    VULNERABILIDADE_SEGURANCA: {
        prioridade: 'critica',
        icone: '[ERRO]',
        descricao: 'Critical security flaw'
    },
    CREDENCIAIS_EXPOSTAS: {
        prioridade: 'critica',
        icone: '[LOCK]',
        descricao: 'Hardcoded or exposed credentials'
    },
    CODIGO_FRAGIL: {
        prioridade: 'alta',
        icone: '[WARN]',
        descricao: 'Code susceptible to failures'
    },
    'tipo-inseguro-any': {
        prioridade: 'alta',
        icone: '[HIGH]',
        descricao: 'Use of any type that can be replaced'
    },
    'tipo-inseguro-unknown': {
        prioridade: 'media',
        icone: '[WARN]',
        descricao: 'Use of unknown type that can be made specific'
    },
    PROBLEMA_TESTE: {
        prioridade: 'alta',
        icone: '[TEST]',
        descricao: 'Testing issues'
    },
    'estrutura-suspeita': {
        prioridade: 'alta',
        icone: '[SCAN]',
        descricao: 'Suspicious code structure'
    },
    COMPLEXIDADE_ALTA: {
        prioridade: 'alta',
        icone: '[STATS]',
        descricao: 'High cyclomatic complexity'
    },
    PROBLEMA_DOCUMENTACAO: {
        prioridade: 'media',
        icone: '[DOC]',
        descricao: 'Missing or inadequate documentation'
    },
    'padrao-ausente': {
        prioridade: 'media',
        icone: '[GOAL]',
        descricao: 'Recommended pattern absent'
    },
    'estrutura-config': {
        prioridade: 'media',
        icone: '[CONFIG]',
        descricao: 'Configuration issues'
    },
    'estrutura-entrypoints': {
        prioridade: 'media',
        icone: '[ENTRY]',
        descricao: 'Poorly defined entrypoints'
    },
    ANALISE_ARQUITETURA: {
        prioridade: 'media',
        icone: '[BUILD]',
        descricao: 'Architectural analysis'
    },
    CONSTRUCOES_SINTATICAS: {
        prioridade: 'baixa',
        icone: '[SYNTAX]',
        descricao: 'Syntactic patterns detected'
    },
    CARACTERISTICAS_ARQUITETURA: {
        prioridade: 'baixa',
        icone: '[ARCH]',
        descricao: 'Architectural characteristics'
    },
    METRICAS_ARQUITETURA: {
        prioridade: 'baixa',
        icone: '[SIZE]',
        descricao: 'Architectural metrics'
    },
    TODO_PENDENTE: {
        prioridade: 'baixa',
        icone: ICONES_FEEDBACK.dica,
        descricao: 'TODOs and pending tasks'
    },
    IDENTIFICACAO_PROJETO: {
        prioridade: 'baixa',
        icone: '[TAG]',
        descricao: 'Project type identification'
    },
    SUGESTAO_MELHORIA: {
        prioridade: 'baixa',
        icone: '[TIP]',
        descricao: 'Improvement suggestion'
    },
    EVIDENCIA_CONTEXTO: {
        prioridade: 'baixa',
        icone: '[SCAN]',
        descricao: 'Context evidence'
    },
    TECNOLOGIAS_ALTERNATIVAS: {
        prioridade: 'baixa',
        icone: '[ALT]',
        descricao: 'Alternative technologies suggested'
    }
};
export const AGRUPAMENTOS_MENSAGEM = [
    {
        padrao: /token hardcoded|senha hardcoded|chave hardcoded|api.*key.*hardcoded/i,
        categoria: 'SEGURANCA_HARDCODED',
        titulo: 'Hardcoded Credentials Detected',
        prioridade: 'critica',
        icone: ICONES_ARQUIVO.lock,
        acaoSugerida: 'Move credentials to environment variables (.env)'
    }, {
        padrao: /sql.*injection|xss|csrf|path.*traversal|command.*injection/i,
        categoria: 'VULNERABILIDADES_WEB',
        titulo: 'Web Vulnerabilities Detected',
        prioridade: 'critica',
        icone: '[ERRO]',
        acaoSugerida: 'Apply input sanitization and validation'
    },
    {
        padrao: /tipo.*inseguro.*any|any.*inseguro|unsafe.*any/i,
        categoria: 'TIPOS_ANY_INSEGUROS',
        titulo: 'Unsafe Any Types Detected',
        prioridade: 'alta',
        icone: '[HIGH]',
        acaoSugerida: 'Replace any with specific types to improve type safety'
    }, {
        padrao: /tipo.*inseguro.*unknown|unknown.*inseguro|unsafe.*unknown/i,
        categoria: 'TIPOS_UNKNOWN_GENERICOS',
        titulo: 'Generic Unknown Types',
        prioridade: 'media',
        icone: '[WARN]',
        acaoSugerida: 'Add type guards or replace with specific types'
    }, {
        padrao: /complexidade.*alta|complex.*high|cyclomatic.*complexity/i,
        categoria: 'COMPLEXIDADE_ALTA',
        titulo: 'Code with High Complexity',
        prioridade: 'alta',
        icone: '[STATS]',
        acaoSugerida: 'Refactor into smaller functions to improve readability'
    }, {
        padrao: /acoplamento.*alto|coupling.*high|tight.*coupling/i,
        categoria: 'ACOPLAMENTO_ALTO',
        titulo: 'High Coupling Between Modules',
        prioridade: 'alta',
        icone: '[LINK]',
        acaoSugerida: 'Review dependencies and apply decoupling patterns'
    },
    {
        padrao: /missing-jsdoc|missing documentation|sem documentação|no.*documentation/i,
        categoria: 'DOCUMENTACAO_AUSENTE',
        titulo: 'Missing Documentation',
        prioridade: 'media',
        icone: '[DOC]',
        acaoSugerida: 'Add JSDoc/comments to improve maintainability'
    }, {
        padrao: /console\.log|console-log|debug.*statement/i,
        categoria: 'CONSOLE_LOGS',
        titulo: 'Console.log in Production Code',
        prioridade: 'media',
        icone: '[LOG]',
        acaoSugerida: 'Remove or replace with a proper logging system'
    }, {
        padrao: /código.*duplicado|duplicate.*code|copy.*paste/i,
        categoria: 'DUPLICACAO_CODIGO',
        titulo: 'Duplicated Code Detected',
        prioridade: 'media',
        icone: '[COPY]',
        acaoSugerida: 'Extract into reusable functions/modules'
    }, {
        padrao: /função.*longa|long.*function|function.*too.*large/i,
        categoria: 'FUNCOES_LONGAS',
        titulo: 'Very Long Functions',
        prioridade: 'media',
        icone: '[SIZE]',
        acaoSugerida: 'Split into smaller, more cohesive functions'
    },
    {
        padrao: /todo|fixme|hack|workaround/i,
        categoria: 'TAREFAS_PENDENTES',
        titulo: 'Pending Tasks in Code',
        prioridade: 'baixa',
        icone: ICONES_FEEDBACK.dica,
        acaoSugerida: 'Review and resolve pending TODOs/FIXMEs'
    }, {
        padrao: /magic.*number|número.*mágico/i,
        categoria: 'NUMEROS_MAGICOS',
        titulo: 'Magic Numbers in Code',
        prioridade: 'baixa',
        icone: ICONES_DIAGNOSTICO.stats,
        acaoSugerida: 'Replace with named constants'
    }
];
export function getPrioridade(tipo) {
    return PRIORIDADES[tipo] || {
        prioridade: 'baixa',
        icone: ICONES_ARQUIVO.arquivo,
        descricao: 'Uncategorized problem'
    };
}
export function findAgrupamento(mensagem) {
    for (const grupo of AGRUPAMENTOS_MENSAGEM) {
        if (grupo.padrao.test(mensagem)) {
            return grupo;
        }
    }
    return null;
}
export function ordenarPorPrioridade(problemas) {
    const ordem = {
        critica: 0,
        alta: 1,
        media: 2,
        baixa: 3
    };
    return [...problemas].sort((arquivo, base) => {
        const prioA = arquivo.prioridade || 'baixa';
        const prioB = base.prioridade || 'baixa';
        return ordem[prioA] - ordem[prioB];
    });
}
export function contarPorPrioridade(problemas) {
    const contagem = {
        critica: 0,
        alta: 0,
        media: 0,
        baixa: 0
    };
    for (const prob of problemas) {
        const prio = prob.prioridade || 'baixa';
        contagem[prio]++;
    }
    return contagem;
}
//# sourceMappingURL=filter-config.js.map