package com.cy.guoyan.admin.module.ai.dal.dataobject.chatmessage;

import lombok.*;

import java.time.LocalDateTime;

import com.baomidou.mybatisplus.annotation.*;
import com.cy.guoyan.admin.framework.mybatis.core.dataobject.BaseDO;
/**
 * AI聊天消息 DO
 *
 * @author 管理员
 */
@TableName("ai_chat_message")
@KeySequence("ai_chat_message_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ChatMessageDO extends BaseDO {

    /**
     * 主键 ID
     */
    @TableId
    private Long id;
    /**
     * 会话 ID（关联 bdcmd_chat_session.id）
     */
    private Long sessionId;
    /**
     * 用户 ID
     */
    private String userId;
    /**
     * 发送方角色：user / assistant / system / tool
     */
    private String role;
    /**
     * 消息内容（支持 markdown / text / 部分 HTML）
     */
    private String content;
    /**
     * 消息发送时间
     */
    private LocalDateTime messageTime;
    /**
     * Dify 消息唯一 ID（message_id）
     */
    private String difyMessageId;
    /**
     * Dify 任务 ID（task_id）
     */
    private String difyTaskId;
    /**
     * Dify 事件类型，如 message, message_end 等
     */
    private String difyEvent;
    /**
     * Dify 会话 ID
     */
    private String difyConversationId;
    /**
     * Dify 消息创建时间戳
     */
    private Long createdTimestamp;
    /**
     * Agent 思考内容（仅 Agent 模式）
     */
    private String agentThought;
    /**
     * Agent 工具调用返回结果
     */
    private String agentObservation;
    /**
     * 使用的工具名，多个用 ; 分隔
     */
    private String agentTool;
    /**
     * 工具输入（JSON 字符串）
     */
    private String agentToolInput;
    /**
     * 文件 ID 列表，JSON数组格式，如 ["xxx", "yyy"]
     */
    private String fileIds;
    /**
     * 文件 URL 列表，JSON数组格式，仅 assistant 角色可用
     */
    private String fileUrls;
    /**
     * 状态：streaming / completed / error
     */
    private String status;
    /**
     * 是否对用户可见
     */
    private Boolean isVisible;
    /**
     * 元数据 JSON（如使用模型、引用信息等）
     */
    private String metadataJson;
    /**
     * 模型用量 JSON（如 tokens 消耗）
     */
    private String usageJson;
    /**
     * 完整 Dify 响应 JSON（用于调试和回放）
     */
    private String responseJson;

}