package com.emoon.knowledge.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.emoon.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.math.BigDecimal;

/**
 * 智能体对象 ai_agent
 *
 * @author wangkang
 * @date 2026-01-27
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "ai_agent", autoResultMap = true)
public class AiAgent extends BaseEntity {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(value = "id")
    private Long id;

    /**
     * 智能体唯一标识（前端生成的ID）
     */
    @TableField("agent_id")
    private String agentId;

    /**
     * 集群编号：1-门诊，2-住院，3-居家，4-院管
     */
    @TableField("cluster_id")
    private Integer clusterId;

    /**
     * 智能体名称
     */
    @TableField("name")
    private String name;

    /**
     * 子类型
     */
    @TableField("sub_type")
    private String subType;

    /**
     * 业务目标
     */
    @TableField("goal")
    private String goal;

    /**
     * 业务场景
     */
    @TableField("scenario")
    private String scenario;

    /**
     * 状态：enabled-启用，disabled-禁用，draft-草稿
     */
    @TableField("status")
    private String status;

    /**
     * 版本号
     */
    @TableField("version")
    private String version;

    /**
     * 触发方式
     */
    @TableField("trigger_mode")
    private String triggerMode;

    /**
     * 触发入口
     */
    @TableField("trigger_entry")
    private String triggerEntry;

    /**
     * 触发渠道（JSON数组）
     */
    @TableField(value = "trigger_channels", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<String> triggerChannels;

    /**
     * 数据源（JSON数组）
     */
    @TableField(value = "data_sources", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<String> dataSources;

    /**
     * 流程步骤（JSON数组）
     */
    @TableField(value = "steps", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<java.util.Map<String, Object>> steps;

    /**
     * 输入字段（JSON数组）
     */
    @TableField(value = "inputs", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<java.util.Map<String, Object>> inputs;

    /**
     * 输出字段（JSON数组）
     */
    @TableField(value = "outputs", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<java.util.Map<String, Object>> outputs;

    /**
     * 集成配置（JSON数组）
     */
    @TableField(value = "integrations", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<java.util.Map<String, Object>> integrations;

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

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

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

    /**
     * 提示词模板ID列表（JSON数组）
     */
    @TableField(value = "runtime_prompt_template_ids", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<String> runtimePromptTemplateIds;

    /**
     * 知识库ID列表（JSON数组）
     */
    @TableField(value = "runtime_knowledge_ids", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<String> runtimeKnowledgeIds;

    /**
     * 工具列表（JSON数组）
     */
    @TableField(value = "runtime_tools", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<String> runtimeTools;

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

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

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

    /**
     * 权限点（JSON数组）
     */
    @TableField(value = "security_permissions", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<String> securityPermissions;

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

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

    /**
     * KPI指标（JSON数组）
     */
    @TableField(value = "kpis", typeHandler = FastjsonTypeHandler.class)
    private java.util.List<java.util.Map<String, Object>> kpis;

    /**
     * 配置的模型ID列表（JSON数组）
     */
    @TableField(value = "model_ids", typeHandler = FastjsonTypeHandler.class, updateStrategy = FieldStrategy.ALWAYS)
    private java.util.List<String> modelIds;

    /**
     * 配置的提示词模板ID列表（JSON数组）
     */
    @TableField(value = "template_ids", typeHandler = FastjsonTypeHandler.class, updateStrategy = FieldStrategy.ALWAYS)
    private java.util.List<String> templateIds;

    /**
     * 配置的知识库ID列表（JSON数组）
     */
    @TableField(value = "rag_ids", typeHandler = FastjsonTypeHandler.class, updateStrategy = FieldStrategy.ALWAYS)
    private java.util.List<String> ragIds;

    /**
     * 配置的API ID列表（JSON数组）
     */
    @TableField(value = "api_ids", typeHandler = FastjsonTypeHandler.class, updateStrategy = FieldStrategy.ALWAYS)
    private java.util.List<String> apiIds;

    /**
     * 配置的卡片ID列表（JSON数组）
     */
    @TableField(value = "card_ids", typeHandler = FastjsonTypeHandler.class, updateStrategy = FieldStrategy.ALWAYS)
    private java.util.List<String> cardIds;

}

