export type DecisionTreeNodeType = "decision" | "action";
export interface DecisionTreeContext {
    readonly values?: Record<string, number | boolean | string | undefined>;
}
export interface DecisionTreeStats {
    readonly totalNodes: number;
    readonly decisionNodes: number;
    readonly actionNodes: number;
    readonly maxDepth: number;
    readonly averageActionDepth: number;
}
export interface DecisionTreeDecision {
    readonly action: string;
    readonly path: readonly string[];
    readonly executed: boolean;
}
export type DecisionCondition = (context: DecisionTreeContext) => boolean;
export type DecisionAction = (context: DecisionTreeContext) => void;
export interface DecisionTreeNode {
    readonly type: DecisionTreeNodeType;
    readonly name: string;
    condition?: DecisionCondition;
    action?: DecisionAction;
    trueBranch?: DecisionTreeNode;
    falseBranch?: DecisionTreeNode;
    parent?: DecisionTreeNode;
}
export declare class DecisionTree {
    private root;
    createDecision(name: string, condition: DecisionCondition): DecisionTreeNode;
    createAction(name: string, action?: DecisionAction): DecisionTreeNode;
    setBranches(node: DecisionTreeNode, trueBranch: DecisionTreeNode, falseBranch: DecisionTreeNode): void;
    setRoot(node: DecisionTreeNode): void;
    getRoot(): DecisionTreeNode | undefined;
    decide(context: DecisionTreeContext, maxDepth?: number): DecisionTreeDecision;
    traverse(context: DecisionTreeContext, maxDepth?: number): DecisionTreeNode | undefined;
    getTraversalPath(context: DecisionTreeContext, maxDepth?: number): readonly string[];
    validate(): boolean;
    getStats(): DecisionTreeStats;
    clone(): DecisionTree;
}
//# sourceMappingURL=DecisionTree.d.ts.map