import { default as ExecuteController } from '../../tts-controller';
import { TaskExecuteContext } from '../types';
interface InterfaceHandler<O = unknown, R = unknown> {
    /**
     * 下一个处理器
     * 链表中的下一个处理器，如果是链表中的最后一个处理器，则为null。
     */
    nextHandler: InterfaceHandler<R, unknown> | null;
    /**
     * 上一个处理器
     * 链表中的上一个处理器，如果是链表中的第一个处理器，则为null。
     */
    prevHandler: InterfaceHandler<unknown, O> | null;
    /**
     * 当前处理器状态
     */
    handlerStatus: any;
    /**
     * 设置处理器链表，用于设置上一个或者下一个处理器
     *
     * @param handler 处理器
     */
    linkHandler: (handler: InterfaceHandler<R, unknown>) => void;
    /**
     * 处理器是否首次执行任务
     */
    isFirstExecute: boolean;
    /**
     * 处理器执行上下文
     */
    executeController: ExecuteController | null;
    /**
     * 设置处理器执行上下文
     *
     * @param executeController 执行上下文
     */
    setExecuteController: (executeController: ExecuteController) => void;
    /**
     * 是否为第一个处理器
     */
    isFirstHandler: boolean;
    /**
     * 是否为最后一个处理器
     */
    isLastHandler: boolean;
    /**
     * 向处理器输入任务数据
     *
     * @param original 任务数据
     */
    handle: (original: O | null) => void;
    /**
     * 将处理结果传递给下一个处理器，当做下一个处理器的任务数据
     */
    forwardToHandler: (result: R) => void;
    /**
     *  设置处理器的执行状态
     */
    setHandlerStatus: (status: any) => void;
    /**
     * 判断当前处理器是否处于指定执行状态
     */
    equalHandlerStatus: (status: any) => boolean;
    /**
     * 需要执行任务的具体逻辑
     *
     * @param context 当前执行者数据上下文（任务数据、是否首次执行、是否最后一次执行）
     */
    execute: (context: TaskExecuteContext) => void;
    /**
     * 处理器是否接受上一个处理传递的数据完毕
     */
    isHandleDataAcceptedComplete: boolean;
}
export default InterfaceHandler;
