/** 定义任务事件类型，用于任务执行过程中的事件通知 */
import type { Zen } from "./Zen";
export type TaozenEventType = "zen:start" | "zen:complete" | "zen:fail" | "zen:retry" | "zen:pause" | "zen:resume" | "tao:start" | "tao:complete" | "tao:fail" | "tao:pause" | "tao:resume" | "tao:retry";
/**
 * Tao 任务配置接口
 * @property name - 任务名称
 * @property description - 任务描述(可选)
 * @property retryFailedZensOnly - 重试时是否只重试失败的步骤(可选)，默认false
 */
export interface TaoConfig {
    name: string;
    description?: string;
    retryFailedZensOnly?: boolean;
}
/**
 * 步骤配置接口
 * @property retry - 重试配置
 * @property timeout - 超时时间
 * @property onCancel - 取消回调函数
 */
export interface ZenConfig {
    retry?: ZenRetryConfig;
    timeout?: number;
    onCancel?: () => void;
}
/** 任务状态 */
export type TaoStatus = "pending" | "running" | "completed" | "failed" | "cancelled" | "paused";
/** 步骤状态 */
export type ZenStatus = "pending" | "running" | "completed" | "failed" | "cancelled";
/**
 * 执行器类型 - 定义步骤的执行逻辑
 * @template TInput - 输入参数类型，通常是ZenInput
 * @template TOutput - 输出结果类型
 * @param input - 执行器的输入参数
 * @returns Promise<TOutput> - 异步执行结果
 */
export type ZenExecutor<TInput = ZenInput, TOutput = any> = (data: TInput) => Promise<TOutput>;
/**
 * Zen输入接口 - 提供访问依赖步骤结果的方法
 * 允许步骤通过get方法直接访问依赖步骤的输出结果
 */
export interface ZenInput {
    get<T>(step: Zen<any, T>): T | undefined;
    getById<T>(stepId: string): T | undefined;
    getRaw(): Record<string, any>;
}
/**
 * 重试配置接口
 * @property maxAttempts - 最大重试次数
 * @property initialDelay - 初始重试延迟时间(毫秒)
 * @property maxDelay - 最大重试延迟时间(毫秒)
 * @property backoffFactor - 重试延迟时间的增长因子
 */
export interface ZenRetryConfig {
    maxAttempts: number;
    initialDelay: number;
    maxDelay: number;
    backoffFactor: number;
}
/**
 * Tao 事件接口
 * @property type - 事件类型
 * @property zenId - 相关步骤ID(可选)
 * @property timestamp - 事件发生时间戳
 * @property data - 事件相关数据(可选)
 * @property error - 错误信息(可选)
 */
export interface TaoEvent {
    type: TaozenEventType;
    zenId?: string;
    timestamp: number;
    data?: any;
    error?: Error;
}
/**
 * Tao 事件监听器类型
 * @param event - Tao事件角色
 */
export type TaoEventListener = (event: TaoEvent) => void;
/**
 * 步骤状态接口
 * @property id - 步骤唯一标识
 * @property name - 步骤名称
 * @property status - 步骤执行状态
 * @property result - 执行结果(可选)
 * @property error - 错误信息(可选)
 * @property startTime - 开始执行时间(可选)
 * @property endTime - 结束执行时间(可选)
 * @property dependencies - 依赖关系数组
 */
export interface ZenState {
    id: string;
    name: string;
    status: ZenStatus;
    result?: any;
    error?: Error;
    startTime?: number;
    endTime?: number;
    dependencies?: string[];
}
