import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSPredicate } from "../Foundation/NSPredicate.js";
import type { _GKRuleSystem } from "./GKRuleSystem.js";
export declare class _GKRule extends _NSObject {
    static alloc(): _GKRule;
    static new(): _GKRule;
    init(): _GKRule;
    /**
     * Create a data-driven rule that uses NSPredicate and a single assert as the action.
     */
    static ruleWithPredicate$assertingFact$grade$(predicate: _NSPredicate, fact: _NSObject, grade: number): _GKRule;
    /**
     * Short hand for data-driven rule that uses NSPredicate and a single retract as the action.
     */
    static ruleWithPredicate$retractingFact$grade$(predicate: _NSPredicate, fact: _NSObject, grade: number): _GKRule;
    /**
     * Short hand for making a rule that uses blocks for the predicate and action. This rule is not able to be archived using NSKeyedArchiver so use a subclass or NSPredicate based rule if serialization of the rule is needed.
     */
    static ruleWithBlockPredicate$action$(predicate: (arg0: _GKRuleSystem) => boolean, action: (arg0: _GKRuleSystem) => void): _GKRule;
    /**
     * Called by the rule system when it is this rule's turn to be evaluated. If the predicate returns YES then the action for the rule will be performed. Once the action is performed the rule will move to the system's executed list until the agenda is reset. @see performAction @see GKRuleSystem.agenda @see GKRuleSystem.executed @see GKRuleSystem.reset @return YES is the predicate passes and the action needs to be performed, NO otherwise.
     */
    evaluatePredicateWithSystem$(system: _GKRuleSystem): boolean;
    /**
     * Performs the action consequence for the rule. This will only be called if the predicate evaluates to YES. Any facts asserted or retracted by the action on the system will cause the system to evaluate the agenda rule set again once the action completes.
     */
    performActionWithSystem$(system: _GKRuleSystem): void;
    /**
     * Salience defines the order in the rule agenda that the system will evaluate. A rule with higher salience will be evaluated before another rule in the agenda that has a lower salience. Defaults to 0. @see GKRuleSystem.agenda
     */
    salience(): number;
    setSalience$(value: number): void;
}
