package tech.easyflow.agent.runtime.skill;

import com.easyagents.agent.runtime.mcp.McpSpec;
import com.easyagents.agent.runtime.skill.AgentSkillBoxSpec;
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 Skill 运行时编译结果。
 */
public class AgentSkillRuntimeCompilation {

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

    /** @return SkillBox 声明 */
    public AgentSkillBoxSpec getSkillBoxSpec() { return skillBoxSpec; }
    /** @param skillBoxSpec SkillBox 声明 */
    public void setSkillBoxSpec(AgentSkillBoxSpec skillBoxSpec) { this.skillBoxSpec = skillBoxSpec; }
    /** @return 静态 Tool 声明 */
    public List<AgentToolSpec> getToolSpecs() { return toolSpecs; }
    /** @param toolSpecs 静态 Tool 声明 */
    public void setToolSpecs(List<AgentToolSpec> toolSpecs) {
        this.toolSpecs = toolSpecs == null ? new ArrayList<>() : new ArrayList<>(toolSpecs);
    }
    /** @return MCP 声明 */
    public List<McpSpec> getMcpSpecs() { return mcpSpecs; }
    /** @param mcpSpecs MCP 声明 */
    public void setMcpSpecs(List<McpSpec> mcpSpecs) {
        this.mcpSpecs = mcpSpecs == null ? new ArrayList<>() : new ArrayList<>(mcpSpecs);
    }
    /** @return Tool 调用器 */
    public Map<String, AgentToolInvoker> getToolInvokers() { return toolInvokers; }
    /** @param toolInvokers Tool 调用器 */
    public void setToolInvokers(Map<String, AgentToolInvoker> toolInvokers) {
        this.toolInvokers = toolInvokers == null ? new LinkedHashMap<>() : new LinkedHashMap<>(toolInvokers);
    }
}
