import Composite from '../Composite';
import BaseNode from '../BaseNode';
import Tick from '../../tick/Tick';

export default SwitchSelector;

declare namespace SwitchSelector {
    /**
     * Configuration options for creating a SwitchSelector node.
     */
    interface IConfig extends Composite.IConfig {
        /**
         * Condition expression.
         */
        expression?: BaseNode.ExpressionValue;
        /**
         * Key list for selection.
         */
        keys?: string[];
        /**
         * Break evaluation on condition.
         */
        conditionEvalBreak?: boolean;
    }
}

/**
 * Selector that switches based on an expression.
 */
declare class SwitchSelector extends Composite {
    /**
     * Create a SwitchSelector node.
     *
     * @param config - Configuration options.
     * @param nodePool - Node pool for resolving ids.
     */
    constructor(
        config?: SwitchSelector.IConfig,
        nodePool?: BaseNode.NodePoolType
    );

    /**
     * Set the selected child index or key.
     *
     * @param index - Child index or key.
     * @returns This SwitchSelector instance.
     */
    setSelectChildIndex(index: number | string): this;

    /**
     * Evaluate the condition.
     *
     * @param tick - Tick instance.
     * @returns Child index.
     */
    evalCondition(tick: Tick): number;

}
