package tech.easyflow.agent.runtime.tool;

import com.easyagents.agent.runtime.mcp.McpSpec;
import com.easyagents.agent.runtime.tool.AgentToolInvoker;
import com.easyagents.agent.runtime.tool.AgentToolSpec;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * Agent 工具运行时编译结果。
 */
public class AgentToolRuntimeCompilation {

    private List<AgentToolSpec> toolSpecs = new ArrayList<>();
    private List<McpSpec> mcpSpecs = new ArrayList<>();
    private Map<String, AgentToolInvoker> toolInvokers = new LinkedHashMap<>();

    /**
     * 获取普通工具声明。
     *
     * @return 普通工具声明
     */
    public List<AgentToolSpec> getToolSpecs() {
        return toolSpecs;
    }

    /**
     * 设置普通工具声明。
     *
     * @param toolSpecs 普通工具声明
     */
    public void setToolSpecs(List<AgentToolSpec> toolSpecs) {
        this.toolSpecs = toolSpecs == null ? new ArrayList<>() : toolSpecs;
    }

    /**
     * 获取 MCP 声明。
     *
     * @return MCP 声明
     */
    public List<McpSpec> getMcpSpecs() {
        return mcpSpecs;
    }

    /**
     * 设置 MCP 声明。
     *
     * @param mcpSpecs MCP 声明
     */
    public void setMcpSpecs(List<McpSpec> mcpSpecs) {
        this.mcpSpecs = mcpSpecs == null ? new ArrayList<>() : mcpSpecs;
    }

    /**
     * 获取工具调用器。
     *
     * @return 工具调用器
     */
    public Map<String, AgentToolInvoker> getToolInvokers() {
        return toolInvokers;
    }

    /**
     * 设置工具调用器。
     *
     * @param toolInvokers 工具调用器
     */
    public void setToolInvokers(Map<String, AgentToolInvoker> toolInvokers) {
        this.toolInvokers = toolInvokers == null ? new LinkedHashMap<>() : toolInvokers;
    }
}
