"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.gerarPalavrasReservadasPorParadigma = gerarPalavrasReservadasPorParadigma;
exports.obterPalavrasExcluidas = obterPalavrasExcluidas;
const palavras_reservadas_1 = require("./palavras-reservadas");
const mapeamento_paradigmas_1 = require("./mapeamento-paradigmas");
/**
 * Gera um conjunto de palavras reservadas filtrado por paradigma.
 * @param paradigma O paradigma desejado ('imperativo', 'infinitivo', ou 'ambos')
 * @returns Um objeto mapeando palavras reservadas para tipos de símbolos
 */
function gerarPalavrasReservadasPorParadigma(paradigma) {
    // Se 'ambos', retorna todas as palavras reservadas
    if (paradigma === 'ambos') {
        return Object.assign({}, palavras_reservadas_1.palavrasReservadasDelegua);
    }
    const palavrasFiltradas = {};
    // Adiciona todas as palavras neutras
    Object.assign(palavrasFiltradas, mapeamento_paradigmas_1.palavrasNeutras);
    // Adiciona palavras do paradigma selecionado
    for (const grupo of mapeamento_paradigmas_1.gruposPalavrasParadigma) {
        const palavrasDoParadigma = paradigma === 'imperativo' ? grupo.imperativo : grupo.infinitivo;
        if (palavrasDoParadigma) {
            for (const palavra of palavrasDoParadigma) {
                palavrasFiltradas[palavra] = grupo.tipo;
            }
        }
    }
    return palavrasFiltradas;
}
/**
 * Obtém as palavras que foram excluídas para um paradigma específico.
 * Útil para mensagens de erro ou documentação.
 * @param paradigma O paradigma escolhido
 * @returns Lista de palavras que não são aceitas neste paradigma
 */
function obterPalavrasExcluidas(paradigma) {
    if (paradigma === 'ambos') {
        return [];
    }
    const palavrasExcluidas = [];
    const paradigmaOposto = paradigma === 'imperativo' ? 'infinitivo' : 'imperativo';
    for (const grupo of mapeamento_paradigmas_1.gruposPalavrasParadigma) {
        const palavrasOpostas = paradigmaOposto === 'imperativo' ? grupo.imperativo : grupo.infinitivo;
        if (palavrasOpostas) {
            palavrasExcluidas.push(...palavrasOpostas);
        }
    }
    return palavrasExcluidas;
}
//# sourceMappingURL=filtro-paradigma.js.map