/**
 * @file src/application/services/rule-loading/RuleDictionary.ts
 * @description Pure functional rule dictionary to manage unique rule loading
 */
import { PraetorianRule } from '../../../shared/types/rules';
/**
 * @interface RuleDictionary
 * @description Dictionary of rules indexed by ID
 */
export interface RuleDictionary {
    [ruleId: string]: PraetorianRule;
}
/**
 * @interface RuleDictionaryResult
 * @description Result of dictionary operations
 */
export interface RuleDictionaryResult {
    dictionary: RuleDictionary;
    added: string[];
    skipped: string[];
    warnings: string[];
}
/**
 * Creates an empty rule dictionary
 * @returns Empty rule dictionary
 */
export declare const createEmptyDictionary: () => RuleDictionary;
/**
 * Adds rules to dictionary, skipping duplicates
 * @param dictionary - Current dictionary
 * @param rules - Rules to add
 * @param source - Source identifier for warnings
 * @returns Dictionary result with added/skipped rules
 */
export declare const addRulesToDictionary: (dictionary: RuleDictionary, rules: PraetorianRule[], source?: string) => RuleDictionaryResult;
/**
 * Merges multiple rule dictionaries
 * @param dictionaries - Array of dictionaries to merge
 * @param sources - Source identifiers for warnings
 * @returns Merged dictionary result
 */
export declare const mergeRuleDictionaries: (dictionaries: RuleDictionary[], sources?: string[]) => RuleDictionaryResult;
/**
 * Converts dictionary to array of rules
 * @param dictionary - Rule dictionary
 * @returns Array of rules
 */
export declare const dictionaryToRules: (dictionary: RuleDictionary) => PraetorianRule[];
/**
 * Gets rule by ID from dictionary
 * @param dictionary - Rule dictionary
 * @param ruleId - Rule ID to find
 * @returns Rule if found, undefined otherwise
 */
export declare const getRuleById: (dictionary: RuleDictionary, ruleId: string) => PraetorianRule | undefined;
/**
 * Checks if rule exists in dictionary
 * @param dictionary - Rule dictionary
 * @param ruleId - Rule ID to check
 * @returns True if rule exists
 */
export declare const hasRule: (dictionary: RuleDictionary, ruleId: string) => boolean;
/**
 * Gets rules by category from dictionary
 * @param dictionary - Rule dictionary
 * @param category - Category to filter by
 * @returns Array of rules in category
 */
export declare const getRulesByCategory: (dictionary: RuleDictionary, category: string) => PraetorianRule[];
/**
 * Gets rules by type from dictionary
 * @param dictionary - Rule dictionary
 * @param type - Type to filter by
 * @returns Array of rules of type
 */
export declare const getRulesByType: (dictionary: RuleDictionary, type: string) => PraetorianRule[];
/**
 * Gets enabled rules from dictionary
 * @param dictionary - Rule dictionary
 * @returns Array of enabled rules
 */
export declare const getEnabledRules: (dictionary: RuleDictionary) => PraetorianRule[];
/**
 * Gets disabled rules from dictionary
 * @param dictionary - Rule dictionary
 * @returns Array of disabled rules
 */
export declare const getDisabledRules: (dictionary: RuleDictionary) => PraetorianRule[];
/**
 * Gets dictionary statistics
 * @param dictionary - Rule dictionary
 * @returns Statistics about the dictionary
 */
export declare const getDictionaryStats: (dictionary: RuleDictionary) => {
    totalRules: number;
    enabledRules: number;
    disabledRules: number;
    categories: (string | undefined)[];
    types: ("schema" | "security" | "format" | "structure")[];
    severities: import("../../../shared/types").ValidationSeverity[];
    uniqueIds: number;
};
/**
 * Filters dictionary by predicate
 * @param dictionary - Rule dictionary
 * @param predicate - Filter function
 * @returns Filtered dictionary
 */
export declare const filterDictionary: (dictionary: RuleDictionary, predicate: (rule: PraetorianRule) => boolean) => RuleDictionary;
/**
 * Removes rules from dictionary
 * @param dictionary - Rule dictionary
 * @param ruleIds - Rule IDs to remove
 * @returns New dictionary without specified rules
 */
export declare const removeRulesFromDictionary: (dictionary: RuleDictionary, ruleIds: string[]) => RuleDictionary;
/**
 * Overrides rules in dictionary
 * @param dictionary - Rule dictionary
 * @param overrides - Rules to override (by ID)
 * @returns New dictionary with overridden rules
 */
export declare const overrideRulesInDictionary: (dictionary: RuleDictionary, overrides: Partial<PraetorianRule>[]) => RuleDictionaryResult;
//# sourceMappingURL=RuleDictionary.d.ts.map