package com.easyagents.agent.runtime.hitl;

import java.time.Instant;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 等待工具执行审批的状态。
 */
public class AgentPendingState {

    private AgentResumeToken resumeToken = AgentResumeToken.create();
    private String sessionId;
    private String agentId;
    private String eventId;
    private String toolCallId;
    private String toolName;
    private String approvalPrompt;
    private Map<String, Object> toolInput = new LinkedHashMap<>();
    private Instant expiresAt;
    private Map<String, Object> metadata = new LinkedHashMap<>();

    /**
     * 获取恢复令牌。
     *
     * @return 恢复令牌
     */
    public AgentResumeToken getResumeToken() {
        return resumeToken;
    }

    /**
     * 设置恢复令牌。
     *
     * @param resumeToken 恢复令牌
     */
    public void setResumeToken(AgentResumeToken resumeToken) {
        this.resumeToken = resumeToken == null ? AgentResumeToken.create() : resumeToken;
    }

    /**
     * 获取会话ID。
     *
     * @return 会话ID
     */
    public String getSessionId() {
        return sessionId;
    }

    /**
     * 设置会话ID。
     *
     * @param sessionId 会话ID
     */
    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }

    /**
     * 获取智能体ID。
     *
     * @return 智能体ID
     */
    public String getAgentId() {
        return agentId;
    }

    /**
     * 设置智能体ID。
     *
     * @param agentId 智能体ID
     */
    public void setAgentId(String agentId) {
        this.agentId = agentId;
    }

    /**
     * 获取事件ID。
     *
     * @return 事件ID
     */
    public String getEventId() {
        return eventId;
    }

    /**
     * 设置事件ID。
     *
     * @param eventId 事件ID
     */
    public void setEventId(String eventId) {
        this.eventId = eventId;
    }

    /**
     * 获取工具调用ID。
     *
     * @return 工具调用ID
     */
    public String getToolCallId() {
        return toolCallId;
    }

    /**
     * 设置工具调用ID。
     *
     * @param toolCallId 工具调用ID
     */
    public void setToolCallId(String toolCallId) {
        this.toolCallId = toolCallId;
    }

    /**
     * 获取工具名称。
     *
     * @return 工具名称
     */
    public String getToolName() {
        return toolName;
    }

    /**
     * 设置工具名称。
     *
     * @param toolName 工具名称
     */
    public void setToolName(String toolName) {
        this.toolName = toolName;
    }

    /**
     * 获取审批提示文案。
     *
     * @return 审批提示文案
     */
    public String getApprovalPrompt() {
        return approvalPrompt;
    }

    /**
     * 设置审批提示文案。
     *
     * @param approvalPrompt 审批提示文案
     */
    public void setApprovalPrompt(String approvalPrompt) {
        this.approvalPrompt = approvalPrompt;
    }

    /**
     * 获取工具调用参数。
     *
     * @return 工具调用参数
     */
    public Map<String, Object> getToolInput() {
        return toolInput;
    }

    /**
     * 设置工具调用参数。
     *
     * @param toolInput 工具调用参数
     */
    public void setToolInput(Map<String, Object> toolInput) {
        this.toolInput = toolInput == null ? new LinkedHashMap<>() : toolInput;
    }

    /**
     * 获取过期时间。
     *
     * @return 过期时间
     */
    public Instant getExpiresAt() {
        return expiresAt;
    }

    /**
     * 设置过期时间。
     *
     * @param expiresAt 过期时间
     */
    public void setExpiresAt(Instant expiresAt) {
        this.expiresAt = expiresAt;
    }

    /**
     * 获取元数据。
     *
     * @return 元数据
     */
    public Map<String, Object> getMetadata() {
        return metadata;
    }

    /**
     * 设置元数据。
     *
     * @param metadata 元数据
     */
    public void setMetadata(Map<String, Object> metadata) {
        this.metadata = metadata == null ? new LinkedHashMap<>() : metadata;
    }
}
