package com.easyagents.agent.runtime.tool.asynctool;

/**
 * 异步工具任务对 Agent Runtime 暴露的统一状态。
 */
public enum AsyncToolTaskStatus {

    /**
     * 任务已创建，等待业务侧执行。
     */
    PENDING,

    /**
     * 任务正在执行。
     */
    RUNNING,

    /**
     * 任务执行成功，结果可用。
     */
    SUCCEEDED,

    /**
     * 任务执行失败。
     */
    FAILED,

    /**
     * 任务正在取消。
     */
    CANCELLING,

    /**
     * 任务已取消。
     */
    CANCELLED,

    /**
     * 任务执行超时。
     */
    TIMEOUT;

    /**
     * 判断状态是否为终态。
     *
     * @return 终态返回 true
     */
    public boolean isTerminal() {
        return this == SUCCEEDED || this == FAILED || this == CANCELLED || this == TIMEOUT;
    }

    /**
     * 判断状态是否仍在执行或等待执行。
     *
     * @return 仍在运行返回 true
     */
    public boolean isRunning() {
        return this == PENDING || this == RUNNING || this == CANCELLING;
    }

    /**
     * 判断状态是否表示成功。
     *
     * @return 成功返回 true
     */
    public boolean isSuccess() {
        return this == SUCCEEDED;
    }

    /**
     * 判断状态是否表示失败类终态。
     *
     * @return 失败、取消或超时返回 true
     */
    public boolean isFailure() {
        return this == FAILED || this == CANCELLED || this == TIMEOUT;
    }
}
