package com.emoon.knowledge.domain.vo;

import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.emoon.knowledge.domain.AiAgent;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 智能体视图对象 ai_agent
 *
 * @author wangkang
 * @date 2026-01-27
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = AiAgent.class)
public class AiAgentVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

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

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

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

    /**
     * 智能体名称
     */
    @JsonProperty("name")
    @ExcelProperty(value = "智能体名称")
    private String name;

    /**
     * 子类型
     */
    @JsonProperty("subType")
    @ExcelProperty(value = "子类型")
    private String subType;

    /**
     * 业务目标
     */
    @JsonProperty("goal")
    @ExcelProperty(value = "业务目标")
    private String goal;

    /**
     * 业务场景
     */
    @JsonProperty("scenario")
    @ExcelProperty(value = "业务场景")
    private String scenario;

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

    /**
     * 版本号
     */
    @JsonProperty("version")
    @ExcelProperty(value = "版本号")
    private String version;

    /**
     * 触发方式
     */
    @JsonProperty("triggerMode")
    @ExcelProperty(value = "触发方式")
    private String triggerMode;

    /**
     * 触发入口
     */
    @JsonProperty("triggerEntry")
    @ExcelProperty(value = "触发入口")
    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")
    @ExcelProperty(value = "运行时模型")
    private String runtimeModel;

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

    /**
     * 最大token数
     */
    @JsonProperty("runtimeMaxTokens")
    @ExcelProperty(value = "最大token数")
    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")
    @ExcelProperty(value = "兜底策略")
    private String runtimeFallback;

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

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

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

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

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

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

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

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

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

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

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

    /**
     * 创建时间
     */
    @ExcelProperty(value = "创建时间")
    private Date createTime;

    /**
     * 更新时间
     */
    @ExcelProperty(value = "更新时间")
    private Date updateTime;

}

