package tech.easyflow.agent.runtime.asynctool;

import com.easyagents.agent.runtime.tool.asynctool.AsyncToolTaskStatus;

import java.util.List;
import java.util.Optional;
import java.util.function.UnaryOperator;

/**
 * Agent 异步工具任务运行态存储。
 */
public interface AgentAsyncToolTaskStore {

    /**
     * 创建任务记录。
     *
     * @param record 任务记录
     */
    void create(AgentAsyncToolTaskRecord record);

    /**
     * 获取当前 session 下的任务记录。
     *
     * @param sessionId Agent Runtime session ID
     * @param taskId 任务 ID
     * @return 任务记录
     */
    Optional<AgentAsyncToolTaskRecord> get(String sessionId, String taskId);

    /**
     * 更新当前 session 下的任务记录。
     *
     * @param sessionId Agent Runtime session ID
     * @param taskId 任务 ID
     * @param updater 更新函数
     * @return 更新后的任务记录
     */
    Optional<AgentAsyncToolTaskRecord> update(String sessionId, String taskId, UnaryOperator<AgentAsyncToolTaskRecord> updater);

    /**
     * 查询当前 session 下可见任务。
     *
     * @param sessionId Agent Runtime session ID
     * @param status 状态过滤；为空时返回全部未过期任务
     * @return 任务列表
     */
    List<AgentAsyncToolTaskRecord> list(String sessionId, AsyncToolTaskStatus status);
}
