package com.easyagents.agent.runtime.skill;

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

/**
 * 声明式 SkillBox 配置。
 */
public class AgentSkillBoxSpec {

    private String skillBoxId;
    private List<AgentSkillSpec> skills = new ArrayList<>();
    private Map<String, List<String>> toolBindings = new LinkedHashMap<>();
    private List<String> enabledToolNames = new ArrayList<>();
    private List<String> disabledToolNames = new ArrayList<>();
    private Map<String, Map<String, Object>> presetParameters = new LinkedHashMap<>();
    private boolean exposeAllSkillMetadata;

    /**
     * 获取SkillBox ID。
     *
     * @return SkillBox ID 标识
     */
    public String getSkillBoxId() {
        return skillBoxId;
    }

    /**
     * 设置SkillBox ID。
     *
     * @param skillBoxId SkillBox ID 标识
     */
    public void setSkillBoxId(String skillBoxId) {
        this.skillBoxId = skillBoxId;
    }

    /**
     * 获取Skill 列表。
     *
     * @return Skill 列表
     */
    public List<AgentSkillSpec> getSkills() {
        return skills;
    }

    /**
     * 设置Skill 列表。
     *
     * @param skills Skill 列表
     */
    public void setSkills(List<AgentSkillSpec> skills) {
        this.skills = skills == null ? new ArrayList<>() : new ArrayList<>(skills);
    }

    /**
     * 获取工具绑定。
     *
     * @return 工具绑定
     */
    public Map<String, List<String>> getToolBindings() {
        return toolBindings;
    }

    /**
     * 设置工具绑定。
     *
     * @param toolBindings 工具绑定
     */
    public void setToolBindings(Map<String, List<String>> toolBindings) {
        this.toolBindings = toolBindings == null ? new LinkedHashMap<>() : toolBindings;
    }

    /**
     * 获取启用的工具名称。
     *
     * @return 启用的工具名称
     */
    public List<String> getEnabledToolNames() {
        return enabledToolNames;
    }

    /**
     * 设置启用的工具名称。
     *
     * @param enabledToolNames 启用的工具名称
     */
    public void setEnabledToolNames(List<String> enabledToolNames) {
        this.enabledToolNames = enabledToolNames == null ? new ArrayList<>() : new ArrayList<>(enabledToolNames);
    }

    /**
     * 获取禁用的工具名称。
     *
     * @return 禁用的工具名称
     */
    public List<String> getDisabledToolNames() {
        return disabledToolNames;
    }

    /**
     * 设置禁用的工具名称。
     *
     * @param disabledToolNames 禁用的工具名称
     */
    public void setDisabledToolNames(List<String> disabledToolNames) {
        this.disabledToolNames = disabledToolNames == null ? new ArrayList<>() : new ArrayList<>(disabledToolNames);
    }

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

    /**
     * 设置预设参数。
     *
     * @param presetParameters 预设参数
     */
    public void setPresetParameters(Map<String, Map<String, Object>> presetParameters) {
        this.presetParameters = presetParameters == null ? new LinkedHashMap<>() : presetParameters;
    }

    /**
     * 返回是否all skill metadata is exposed。
     *
     * @return 所有元数据暴露时为 true
     */
    public boolean isExposeAllSkillMetadata() {
        return exposeAllSkillMetadata;
    }

    /**
     * 设置元数据暴露开关。
     *
     * @param exposeAllSkillMetadata 元数据暴露开关
     */
    public void setExposeAllSkillMetadata(boolean exposeAllSkillMetadata) {
        this.exposeAllSkillMetadata = exposeAllSkillMetadata;
    }

}
