package com.infoepoch.pms.agent.platform.agent.adapter.out.tool;

import com.infoepoch.pms.agent.platform.agent.application.AgentSubmitService;
import com.infoepoch.pms.agent.platform.agent.application.dto.AgentSubmitResult;
import com.infoepoch.pms.agent.platform.agent.domain.Agent;
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.model.ToolContext;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 智能体显式提交工具。
 */
@Component
@RequiredArgsConstructor
public class SubmitTool {

    public static final String AGENT_CONTEXT_KEY = "agent";

    private final AgentSubmitService agentSubmitService;

    /**
     * 提交当前子智能体已收集的字段数据。
     *
     * @param fields      待提交字段
     * @param toolContext 工具上下文，必须包含当前子智能体
     * @return 提交结果
     */
    @Tool(description = "提交当前子智能体已收集完成的表单字段。当字段齐全并准备结束当前任务时调用")
    public AgentSubmitResult submit(Map<String, Object> fields, ToolContext toolContext) {
        return agentSubmitService.submit(extractAgent(toolContext), fields);
    }

    /**
     * 从 ToolContext 中提取当前子智能体。
     *
     * @param toolContext 工具上下文
     * @return 当前子智能体
     */
    private Agent extractAgent(ToolContext toolContext) {
        Object agent = toolContext.getContext().get(AGENT_CONTEXT_KEY);
        if (agent instanceof Agent currentAgent) {
            return currentAgent;
        }
        throw new IllegalArgumentException("ToolContext 中缺少当前智能体");
    }
}
