package com.emoon.knowledge.domain.bo;

import com.emoon.common.core.validate.validate.AddGroup;
import com.emoon.common.core.validate.validate.EditGroup;
import com.emoon.common.mybatis.core.domain.BaseEntity;
import com.emoon.knowledge.domain.AiAgent;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 智能体业务对象 ai_agent
 *
 * @author wangkang
 * @date 2026-01-27
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = AiAgent.class, reverseConvertGenerate = false)
public class AiAgentBo extends BaseEntity {

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 智能体唯一标识（前端生成的ID）
     */
    @NotBlank(message = "智能体ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private String agentId;

    /**
     * 集群编号：1-门诊，2-住院，3-居家，4-院管
     */
    @NotNull(message = "集群编号不能为空", groups = { AddGroup.class, EditGroup.class })
    @Min(value = 1, message = "集群编号最小为1", groups = { AddGroup.class, EditGroup.class })
    @Max(value = 4, message = "集群编号最大为4", groups = { AddGroup.class, EditGroup.class })
    private Integer clusterId;

    /**
     * 智能体名称
     */
    @NotBlank(message = "智能体名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String name;

    /**
     * 子类型
     */
    private String subType;

    /**
     * 业务目标
     */
    private String goal;

    /**
     * 业务场景
     */
    private String scenario;

    /**
     * 状态：enabled-启用，disabled-禁用，draft-草稿
     */
    private String status;

    /**
     * 版本号
     */
    private String version;

    /**
     * 触发方式
     */
    private String triggerMode;

    /**
     * 触发入口
     */
    private String triggerEntry;

    /**
     * 触发渠道（JSON数组）
     */
    @JsonProperty("triggerChannels")
    private List<String> triggerChannels;

    /**
     * 数据源（JSON数组）
     */
    @JsonProperty("dataSources")
    private List<String> dataSources;

    /**
     * 流程步骤（JSON数组）
     */
    @JsonProperty("steps")
    private List<Map<String, Object>> steps;

    /**
     * 输入字段（JSON数组）
     */
    @JsonProperty("inputs")
    private List<Map<String, Object>> inputs;

    /**
     * 输出字段（JSON数组）
     */
    @JsonProperty("outputs")
    private List<Map<String, Object>> outputs;

    /**
     * 集成配置（JSON数组）
     */
    @JsonProperty("integrations")
    private List<Map<String, Object>> integrations;

    /**
     * 运行时模型
     */
    @JsonProperty("runtimeModel")
    private String runtimeModel;

    /**
     * 温度参数
     */
    @JsonProperty("runtimeTemperature")
    private BigDecimal runtimeTemperature;

    /**
     * 最大token数
     */
    @JsonProperty("runtimeMaxTokens")
    private Integer runtimeMaxTokens;

    /**
     * 提示词模板ID列表（JSON数组）
     */
    @JsonProperty("runtimePromptTemplateIds")
    private List<String> runtimePromptTemplateIds;

    /**
     * 知识库ID列表（JSON数组）
     */
    @JsonProperty("runtimeKnowledgeIds")
    private List<String> runtimeKnowledgeIds;

    /**
     * 工具列表（JSON数组）
     */
    @JsonProperty("runtimeTools")
    private List<String> runtimeTools;

    /**
     * 兜底策略
     */
    @JsonProperty("runtimeFallback")
    private String runtimeFallback;

    /**
     * 是否包含PII
     */
    @JsonProperty("securityPii")
    private Boolean securityPii;

    /**
     * 是否审计
     */
    @JsonProperty("securityAudit")
    private Boolean securityAudit;

    /**
     * 权限点（JSON数组）
     */
    @JsonProperty("securityPermissions")
    private List<String> securityPermissions;

    /**
     * 人工升级/兜底
     */
    @JsonProperty("securityEscalation")
    private String securityEscalation;

    /**
     * 负责人（产品）
     */
    @JsonProperty("ownerProduct")
    private String ownerProduct;

    /**
     * KPI指标（JSON数组）
     */
    @JsonProperty("kpis")
    private List<Map<String, Object>> kpis;

    /**
     * 配置的模型ID列表（JSON数组）
     */
    @JsonProperty("modelIds")
    private List<String> modelIds;

    /**
     * 配置的提示词模板ID列表（JSON数组）
     */
    @JsonProperty("templateIds")
    private List<String> templateIds;

    /**
     * 配置的知识库ID列表（JSON数组）
     */
    @JsonProperty("ragIds")
    private List<String> ragIds;

    /**
     * 配置的API ID列表（JSON数组）
     */
    @JsonProperty("apiIds")
    private List<String> apiIds;

    /**
     * 配置的卡片ID列表（JSON数组）
     */
    @JsonProperty("cardIds")
    private List<String> cardIds;

}

