import TaskQueueBase, { TaskQueueBaseProps } from './base';
import { Task, TaskId, TaskPriority, TaskStatus, TaskStatusUpdateHandler } from './type';
export type { TaskId, TaskStatus, QueueId, TaskPrioritizationMode, Task, } from './type';
export declare const MESSAGE_HUB_KEY = "task-queue";
export interface TaskQueueProps extends TaskQueueBaseProps {
}
/**
 * Task queue with concurrency control. By default, all added tasks will be auto
 * scheduled and executed. You can use stop() and start() to control the
 * execution.
 */
export declare class TaskQueue extends TaskQueueBase {
    private messageHub;
    constructor(props?: TaskQueueProps);
    /**
     * Subscribe to the task status changes.
     * @param onTaskStatusUpdate The listener for task status updates
     */
    subscribeTaskStatusChange(onTaskStatusUpdate: TaskStatusUpdateHandler): () => void;
    /**
     * Unsubscribe from the task status changes.
     * @param onTaskStatusUpdate The listener for task status updates
     */
    unsubscribeTaskStatusChange(onTaskStatusUpdate: TaskStatusUpdateHandler): void;
    /**
     * Add a task with callback function to the queue.
     * @param callback The callback function of the task
     */
    addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>): Promise<ReturnType>;
    /**
     * Add a task with callback function to the queue.
     * @param callback The callback function of the task
     * @param onStatusUpdate The callback function to subscribe task status
     * changes
     */
    addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>;
    /**
     * Add a task with callback function to the queue.
     * @param callback The callback function of the task
     * @param taskId The ID of the task
     * @param onStatusUpdate The callback function to subscribe task status
     * changes
     */
    addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, taskId?: TaskId | undefined, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>;
    /**
     * Add a task with callback function to the prioritized queue.
     * @param callback The callback function of the task
     */
    addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>): Promise<ReturnType>;
    /**
     * Add a task with callback function to the prioritized queue.
     * @param callback The callback function of the task
     * @param onStatusUpdate The callback function to subscribe task status
     * changes
     */
    addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>;
    /**
     * Add a task with callback function to the prioritized queue.
     * @param callback The callback function of the task
     * @param taskId The ID of the task
     * @param onStatusUpdate The callback function to subscribe task status
     * changes
     */
    addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, taskId?: TaskId | undefined, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>;
    /**
     * Add tasks with callback functions to the queue.
     * @param tasks The array of tasks with callback functions, IDs, task status
     * update subscribers, and priorities
     */
    addTasks(tasks: Array<{
        callback: () => unknown;
        taskId?: TaskId;
        onStatusUpdate?: TaskStatusUpdateHandler<unknown>;
        priority?: TaskPriority;
    }>): Promise<unknown[]>;
    /**
     * Clear all waited tasks from the queue.
     */
    clearWaitedTasks(): void;
    /**
     * Remove the task from waited task queue.
     * @param taskIdOrTask The ID of the task or task object
     */
    removeWaitedTask(taskIdOrTask: TaskId | Task): void;
    /**
     * Clear all failed retryable tasks from the queue.
     */
    clearFailedRetryableTasks(): void;
    /**
     * Remove the task from failed retryable task queue.
     * @param taskIdOrTask The ID of the task or task object
     */
    removeFailedRetryableTask(taskIdOrTask: TaskId | Task): void;
    /** @internal */
    private _assertMemorizingTasksEnabled;
    /**
     * Get the task details with task ID.
     * @param taskId The ID of the task
     */
    getTaskDetails(taskId: TaskId): Task<any>;
    /**
     * Get all task details with optional matching status.
     * @param status The matched status or array of statuses
     */
    getAllTasksDetails(status?: TaskStatus | Array<TaskStatus>): Task<any>[];
    /**
     * Clear the task details with task ID.
     * @param taskId The ID of the task
     */
    clearTaskDetails(taskId: TaskId): void;
    /**
     * Clear all task details.
     */
    clearAllTasksDetails(): void;
}
export default TaskQueue;
