package com.emotion.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.emotion.common.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 消息实体类
 *
 * @author huazhongmin
 * @date 2025-07-23
 */
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_message")
public class Message extends BaseEntity {

    /**
     * 对话ID
     */
    @TableField("conversation_id")
    private String conversationId;

    /**
     * 消息内容
     */
    @TableField("content")
    private String content;

    /**
     * 消息类型
     */
    @TableField("type")
    private String type;

    /**
     * 发送者: user-用户, assistant-AI助手
     */
    @TableField("sender")
    private String sender;

    /**
     * 消息时间戳
     */
    @TableField("timestamp")
    private LocalDateTime timestamp;

    /**
     * Coze平台的聊天ID
     */
    @TableField("coze_chat_id")
    private String cozeChatId;

    /**
     * Coze平台的消息ID
     */
    @TableField("coze_message_id")
    private String cozeMessageId;

    /**
     * 消息状态: sending/sent/failed/processing
     */
    @TableField("status")
    private String status;

    /**
     * 错误信息
     */
    @TableField("error_message")
    private String errorMessage;

    /**
     * 情绪评分
     */
    @TableField("emotion_score")
    private BigDecimal emotionScore;

    /**
     * 情绪类型
     */
    @TableField("emotion_type")
    private String emotionType;

    /**
     * 情绪分析置信度
     */
    @TableField("emotion_confidence")
    private BigDecimal emotionConfidence;

    /**
     * 输入Token数
     */
    @TableField("prompt_tokens")
    private Integer promptTokens;

    /**
     * 输出Token数
     */
    @TableField("completion_tokens")
    private Integer completionTokens;

    /**
     * 总Token数
     */
    @TableField("total_tokens")
    private Integer totalTokens;

    /**
     * API调用费用
     */
    @TableField("api_cost")
    private BigDecimal apiCost;

    /**
     * 是否已读: 0-未读, 1-已读
     */
    @TableField("is_read")
    private Integer isRead;

    /**
     * 父消息ID（用于回复链）
     */
    @TableField("parent_message_id")
    private String parentMessageId;

    /**
     * 情绪分析结果
     */
    @TableField("emotion_analysis")
    private String emotionAnalysis;

    /**
     * 扩展元数据
     */
    @TableField("metadata")
    private String metadata;

    /**
     * 用户ID (注册用户或访客用户)
     */
    @TableField("user_id")
    private String userId;

    /**
     * 用户类型 (registered/guest)
     */
    @TableField("user_type")
    private String userType;

    /**
     * Coze消息角色 (user/assistant/system)
     */
    @TableField("coze_role")
    private String cozeRole;

    /**
     * Coze消息内容类型 (text/image/file等)
     */
    @TableField("coze_content_type")
    private String cozeContentType;

    /**
     * 消息顺序 - 在同一个会话中递增，用于确保消息展示顺序
     */
    @TableField("message_order")
    private Long messageOrder;

}
