/**
 * ToolConfigResolver
 *
 * Implements 3-tier hierarchy for tool configuration:
 * Item requirements > Roster allowances > Student accommodations
 *
 * Ensures IEP/504 compliance by properly handling accommodation requirements
 * while respecting item-level and test-level restrictions.
 *
 * Features:
 * - 3-tier configuration hierarchy
 * - IEP/504 accommodation support
 * - Item-specific tool requirements
 * - Test-level tool restrictions
 * - Type-safe configuration
 *
 * Part of PIE Assessment Toolkit.
 */
/**
 * Tool allowance: "0" = blocked, "1" = allowed
 */
export type ToolAllowance = "0" | "1";
/**
 * Item-level tool configuration (most specific)
 */
export interface ItemToolConfig {
    [toolId: string]: {
        type?: string;
        required?: boolean;
        settings?: any;
    };
}
/**
 * Roster/Test-level tool allowances (assessment-wide rules)
 */
export interface RosterToolConfig {
    [toolId: string]: ToolAllowance;
}
/**
 * Student accommodation profile (least specific)
 */
export interface StudentAccommodations {
    accommodations: string[];
}
/**
 * Resolved tool configuration
 */
export interface ResolvedToolConfig {
    enabled: boolean;
    type?: string;
    required?: boolean;
    settings?: any;
    source: "item" | "roster" | "student" | "default";
}
/**
 * Full configuration input
 */
export interface ToolConfigInput {
    itemConfig?: ItemToolConfig;
    rosterConfig?: RosterToolConfig;
    studentProfile?: StudentAccommodations;
}
export declare class ToolConfigResolver {
    /**
     * Resolve configuration for a specific tool
     *
     * Hierarchy (highest to lowest priority):
     * 1. Item level: Item requires scientific calculator → must provide
     * 2. Roster level: Test blocks a tool → blocked regardless of accommodation
     * 3. Student level: IEP requires TTS → enabled unless blocked above
     *
     * @param toolId Tool identifier
     * @param itemConfig Item-level tool configuration
     * @param rosterConfig Roster-level tool allowances
     * @param studentProfile Student accommodation profile
     * @returns Resolved configuration or null if tool not available
     */
    resolveTool(toolId: string, itemConfig?: ItemToolConfig, rosterConfig?: RosterToolConfig, studentProfile?: StudentAccommodations): ResolvedToolConfig | null;
    /**
     * Resolve all tools from configuration
     *
     * @param input Configuration input
     * @returns Map of tool ID to resolved configuration
     */
    resolveAll(input: ToolConfigInput): Map<string, ResolvedToolConfig>;
    /**
     * Check if a tool is enabled
     *
     * @param toolId Tool identifier
     * @param input Configuration input
     * @returns true if tool is enabled
     */
    isToolEnabled(toolId: string, input: ToolConfigInput): boolean;
    /**
     * Check if a tool is required
     *
     * @param toolId Tool identifier
     * @param input Configuration input
     * @returns true if tool is required
     */
    isToolRequired(toolId: string, input: ToolConfigInput): boolean;
    /**
     * Get tool type (e.g., 'scientific' for calculator)
     *
     * @param toolId Tool identifier
     * @param input Configuration input
     * @returns Tool type or null
     */
    getToolType(toolId: string, input: ToolConfigInput): string | null;
    /**
     * Get tool settings
     *
     * @param toolId Tool identifier
     * @param input Configuration input
     * @returns Tool settings or null
     */
    getToolSettings(toolId: string, input: ToolConfigInput): any | null;
    /**
     * Get list of all enabled tools
     *
     * @param input Configuration input
     * @returns Array of enabled tool IDs
     */
    getEnabledTools(input: ToolConfigInput): string[];
    /**
     * Get list of required tools
     *
     * @param input Configuration input
     * @returns Array of required tool IDs
     */
    getRequiredTools(input: ToolConfigInput): string[];
    /**
     * Validate that all required tools are available
     *
     * @param availableTools Set of available tool IDs
     * @param input Configuration input
     * @returns Object with validation result
     */
    validate(availableTools: Set<string>, input: ToolConfigInput): {
        valid: boolean;
        missingTools: string[];
    };
    /**
     * Merge multiple roster configurations (for complex assessments)
     *
     * More restrictive settings win (blocked > allowed).
     *
     * @param configs Array of roster configurations
     * @returns Merged configuration
     */
    mergeRosterConfigs(...configs: RosterToolConfig[]): RosterToolConfig;
    /**
     * Merge multiple student accommodation profiles
     *
     * Union of all accommodations.
     *
     * @param profiles Array of student profiles
     * @returns Merged profile
     */
    mergeStudentProfiles(...profiles: StudentAccommodations[]): StudentAccommodations;
}
