import { RJSFSchema, UiSchema } from '@rjsf/utils';
import { ConditionalRule, ConditionalEvent, ConditionalActions, ConditionalEngineInstance } from '../types';

export declare class DynamicArrayConditionalEngine implements ConditionalEngineInstance {
    private originalRules;
    private engine;
    private expandedRules;
    constructor(rules: ConditionalRule[], schema: RJSFSchema, uiSchema?: UiSchema, extraActions?: ConditionalActions);
    /**
     * Expand array patterns like directors[*] based on actual form data
     */
    expandArrayPatterns(rules: ConditionalRule[], formData: any): ConditionalRule[];
    /**
     * Check if a rule contains array patterns like [*]
     */
    private hasArrayPatterns;
    /**
     * Expand a single rule that contains array patterns
     */
    private expandSingleRule;
    /**
     * Find all array patterns like "directors[*]" in a rule
     */
    private findArrayPatterns;
    /**
     * Expand a rule for a specific array index
     */
    private expandRuleForIndex;
    /**
     * Get nested value from object using dot notation
     */
    private getNestedValue;
    /**
     * Pre-process uiSchema to ensure array items have proper template structure
     */
    private preprocessUiSchemaForArrays;
    /**
     * Main processing method - implement ConditionalEngineInstance interface
     */
    processFormData(formData: any): Promise<{
        schema: RJSFSchema;
        uiSchema: UiSchema;
        formData: any;
    }>;
    /**
     * Get the original unexpanded rules
     */
    getOriginalRules(): ConditionalRule[];
    /**
     * Get the current expanded rules
     */
    getCurrentRules(): ConditionalRule[];
    /**
     * Manually set rules (useful for testing)
     */
    setRules(rules: ConditionalRule[]): void;
    /**
     * Add a rule to the engine (implement ConditionalEngineInstance interface)
     */
    addRule(rule: ConditionalRule): void;
    /**
     * Run the conditional engine and return events (implement ConditionalEngineInstance interface)
     */
    run(formData: any): Promise<ConditionalEvent[]>;
    /**
     * Add an action to the engine (for ConditionalContext compatibility)
     */
    addAction(actionType: string, actionFunction: any): void;
    /**
     * Remove an action from the engine (for ConditionalContext compatibility)
     */
    removeAction(actionType: string): void;
    /**
     * Get available actions (for ConditionalContext compatibility)
     */
    getAvailableActions(): string[];
}
