package tech.easyflow.admin.controller.agent;

import tech.easyflow.agent.entity.AgentSkillBinding;

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

/**
 * Agent Skill 整组替换请求。
 *
 * <p>使用标准 JavaBean 以兼容 {@code @JsonBody} 的 Fastjson 1 嵌套列表转换。</p>
 */
public class AgentSkillBindingUpdateRequest {

    private BigInteger agentId;
    private List<Binding> bindings;

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

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

    /** @return Agent ID */
    public BigInteger getAgentId() { return agentId; }
    /** @param agentId Agent ID */
    public void setAgentId(BigInteger agentId) { this.agentId = agentId; }
    /** @return Skill 引用 */
    public List<Binding> getBindings() { return bindings; }
    /** @param bindings Skill 引用 */
    public void setBindings(List<Binding> bindings) { this.bindings = bindings; }

    /** 客户端允许提交的最小 Skill 引用。 */
    public static class Binding {

        private BigInteger skillId;
        private Integer sortNo;

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

        /**
         * 创建最小 Skill 绑定。
         *
         * @param skillId Skill ID
         * @param sortNo 排序号
         */
        public Binding(BigInteger skillId, Integer sortNo) {
            this.skillId = skillId;
            this.sortNo = sortNo;
        }

        /** @return Skill ID */
        public BigInteger getSkillId() { return skillId; }
        /** @param skillId Skill ID */
        public void setSkillId(BigInteger skillId) { this.skillId = skillId; }
        /** @return 排序号 */
        public Integer getSortNo() { return sortNo; }
        /** @param sortNo 排序号 */
        public void setSortNo(Integer sortNo) { this.sortNo = sortNo; }

        /**
         * 转换为不含任何服务端快照的领域引用。
         *
         * @return 最小 Skill 绑定
         */
        public AgentSkillBinding toEntity() {
            AgentSkillBinding value = new AgentSkillBinding();
            value.setSkillId(skillId);
            value.setSortNo(sortNo);
            return value;
        }
    }
}
