import Composite from '../Composite';
import BaseNode from '../BaseNode';
import Tick from '../../tick/Tick';

export default WeightSelector;

declare namespace WeightSelector {
    /**
     * Configuration options for creating a WeightSelector node.
     */
    interface IConfig extends Composite.IConfig {
        /**
         * Expression used to select weight.
         */
        expression?: BaseNode.ExpressionValue;
        /**
         * Weight list for children.
         */
        weights?: number[];
        /**
         * Break evaluation on condition.
         */
        conditionEvalBreak?: boolean;
    }
}

/**
 * Selector that chooses by weight.
 */
declare class WeightSelector extends Composite {
    /**
     * Create a WeightSelector node.
     *
     * @param config - Configuration options.
     * @param nodePool - Node pool for resolving ids.
     */
    constructor(
        config?: WeightSelector.IConfig,
        nodePool?: BaseNode.NodePoolType
    );

    /**
     * Set the selected child index.
     *
     * @param index - Child index.
     * @returns This WeightSelector instance.
     */
    setSelectChildIndex(index: number): this;

    /**
     * Evaluate the condition.
     *
     * @param tick - Tick instance.
     * @returns Child index.
     */
    evalCondition(tick: Tick): number;
}
