package com.easyagents.agent.runtime.mcp;

import io.agentscope.core.tool.mcp.McpClientWrapper;

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

/**
 * 等待注册到指定 Skill 的 MCP client。
 */
public class McpSkillRegistration {

    private final String skillId;
    private final McpClientWrapper client;
    private final List<String> enableTools;
    private final List<String> disableTools;
    private final Map<String, Map<String, Object>> presetParameters;

    /**
     * 创建 Skill MCP 注册声明。
     *
     * @param skillId Skill ID
     * @param client MCP client
     * @param enableTools 运行时工具白名单
     * @param disableTools 运行时工具黑名单
     * @param presetParameters 预设参数
     */
    public McpSkillRegistration(String skillId,
                                McpClientWrapper client,
                                List<String> enableTools,
                                List<String> disableTools,
                                Map<String, Map<String, Object>> presetParameters) {
        this.skillId = skillId;
        this.client = client;
        this.enableTools = enableTools == null ? List.of() : new ArrayList<>(enableTools);
        this.disableTools = disableTools == null ? List.of() : new ArrayList<>(disableTools);
        this.presetParameters = presetParameters == null
                ? Map.of()
                : new LinkedHashMap<>(presetParameters);
    }

    /**
     * 获取 Skill ID。
     *
     * @return Skill ID
     */
    public String getSkillId() {
        return skillId;
    }

    /**
     * 获取 MCP client。
     *
     * @return MCP client
     */
    public McpClientWrapper getClient() {
        return client;
    }

    /**
     * 获取运行时工具白名单。
     *
     * @return 工具白名单
     */
    public List<String> getEnableTools() {
        return enableTools;
    }

    /**
     * 获取运行时工具黑名单。
     *
     * @return 工具黑名单
     */
    public List<String> getDisableTools() {
        return disableTools;
    }

    /**
     * 获取预设参数。
     *
     * @return 预设参数
     */
    public Map<String, Map<String, Object>> getPresetParameters() {
        return presetParameters;
    }
}
