import { ITaskProcessor, ITaskProcessorConfig, ITaskItem, IFunction, ITaskOptions } from '@leafer/interface';

declare class TaskProcessor implements ITaskProcessor {
    config: ITaskProcessorConfig;
    protected list: ITaskItem[];
    protected parallelList: ITaskItem[];
    protected parallelSuccessNumber: number;
    running: boolean;
    isComplete: boolean;
    protected timer: any;
    get total(): number;
    index: number;
    delayNumber: number;
    get finishedIndex(): number;
    get remain(): number;
    get percent(): number;
    constructor(config?: ITaskProcessorConfig);
    add(taskCallback: IFunction, options?: ITaskOptions | number, canUse?: IFunction): ITaskItem;
    protected push(task: ITaskItem, start?: boolean): void;
    protected empty(): void;
    start(): void;
    pause(): void;
    resume(): void;
    skip(): void;
    stop(): void;
    protected run(): void;
    protected runTask(): void;
    protected runParallelTasks(): void;
    protected runParallelTask(task: ITaskItem): void;
    private nextTask;
    protected setParallelList(): void;
    protected fillParallelTask(): void;
    protected onComplete(): void;
    protected onTask(task: ITaskItem): void;
    protected onParallelError(error: unknown): void;
    protected onError(error: unknown): void;
    destroy(): void;
}

declare class TaskItem implements ITaskItem {
    readonly id: number;
    parent: TaskProcessor;
    parallel: boolean;
    time: number;
    isComplete: boolean;
    isCancel: boolean;
    runing: boolean;
    canUse?: IFunction;
    task: IFunction;
    constructor(task?: IFunction);
    run(): Promise<void>;
    complete(): void;
    cancel(): void;
}

export { TaskItem, TaskProcessor };
