package tech.easyflow.admin.controller.skill.vo;

import tech.easyflow.skill.entity.SkillToolBinding;

import java.math.BigInteger;
import java.util.List;

/**
 * Skill Tool 整组替换请求。
 *
 * <p>{@code @JsonBody} 当前由 Fastjson 1 完成转换，使用标准 JavaBean 可确保嵌套列表元素
 * 按声明类型转换，避免嵌套 record 被保留为 {@code JSONObject}。</p>
 */
public class SkillToolBindingUpdateRequest {

    private BigInteger skillId;
    private List<Binding> bindings;

    /** 创建空请求。 */
    public SkillToolBindingUpdateRequest() {
    }

    /**
     * 创建 Skill Tool 绑定请求。
     *
     * @param skillId Skill ID
     * @param bindings 绑定引用
     */
    public SkillToolBindingUpdateRequest(BigInteger skillId, List<Binding> bindings) {
        this.skillId = skillId;
        this.bindings = bindings;
    }

    /** @return Skill ID */
    public BigInteger getSkillId() { return skillId; }
    /** @param skillId Skill ID */
    public void setSkillId(BigInteger skillId) { this.skillId = skillId; }
    /** @return 绑定引用 */
    public List<Binding> getBindings() { return bindings; }
    /** @param bindings 绑定引用 */
    public void setBindings(List<Binding> bindings) { this.bindings = bindings; }

    /** 客户端允许提交的最小绑定字段。 */
    public static class Binding {

        private String toolType;
        private BigInteger targetId;
        private Boolean hitlEnabled;
        private Integer sortNo;
        private String mcpToolManifestHash;

        /** 创建空绑定。 */
        public Binding() {
        }

        /**
         * 创建最小 Tool 绑定。
         *
         * @param toolType Tool 类型
         * @param targetId 目标资源 ID
         * @param hitlEnabled 是否调用前确认
         * @param sortNo 排序号
         * @param mcpToolManifestHash MCP Tool 清单 hash
         */
        public Binding(String toolType, BigInteger targetId, Boolean hitlEnabled,
                       Integer sortNo, String mcpToolManifestHash) {
            this.toolType = toolType;
            this.targetId = targetId;
            this.hitlEnabled = hitlEnabled;
            this.sortNo = sortNo;
            this.mcpToolManifestHash = mcpToolManifestHash;
        }

        /** @return Tool 类型 */
        public String getToolType() { return toolType; }
        /** @param toolType Tool 类型 */
        public void setToolType(String toolType) { this.toolType = toolType; }
        /** @return 目标资源 ID */
        public BigInteger getTargetId() { return targetId; }
        /** @param targetId 目标资源 ID */
        public void setTargetId(BigInteger targetId) { this.targetId = targetId; }
        /** @return 是否调用前确认 */
        public Boolean getHitlEnabled() { return hitlEnabled; }
        /** @param hitlEnabled 是否调用前确认 */
        public void setHitlEnabled(Boolean hitlEnabled) { this.hitlEnabled = hitlEnabled; }
        /** @return 排序号 */
        public Integer getSortNo() { return sortNo; }
        /** @param sortNo 排序号 */
        public void setSortNo(Integer sortNo) { this.sortNo = sortNo; }
        /** @return MCP Tool 清单 hash */
        public String getMcpToolManifestHash() { return mcpToolManifestHash; }
        /** @param mcpToolManifestHash MCP Tool 清单 hash */
        public void setMcpToolManifestHash(String mcpToolManifestHash) {
            this.mcpToolManifestHash = mcpToolManifestHash;
        }

        /**
         * 转换为领域绑定引用。
         *
         * @return 最小 Tool 绑定
         */
        public SkillToolBinding toEntity() {
            SkillToolBinding value = new SkillToolBinding();
            value.setToolType(toolType);
            value.setTargetId(targetId);
            value.setHitlEnabled(hitlEnabled);
            value.setSortNo(sortNo);
            value.setMcpToolManifestHash(mcpToolManifestHash);
            return value;
        }
    }
}
