package com.zhentao.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 聊天消息实体类
 * 存储在MySQL中
 */
@Data
@TableName("chat_message")
public class ChatMessage implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 消息主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 消息唯一ID（UUID）
     */
    private String messageId;

    /**
     * 会话ID（格式：userId小_userId大）
     */
    private String conversationId;

    /**
     * 发送者用户ID
     */
    private Long fromUserId;

    /**
     * 发送者用户名
     */
    private String fromUserName;

    /**
     * 发送者头像
     */
    private String fromUserAvatar;

    /**
     * 接收者用户ID
     */
    private Long toUserId;

    /**
     * 接收者用户名
     */
    private String toUserName;

    /**
     * 消息类型：1-文本 2-图片 3-语音 4-视频 5-文件
     */
    private Integer messageType;

    /**
     * 消息内容（文本内容或媒体描述）
     */
    private String content;

    /**
     * 媒体文件URL
     */
    private String mediaUrl;

    /**
     * 缩略图URL
     */
    private String thumbnailUrl;

    /**
     * 文件大小（字节）
     */
    private Long mediaSize;

    /**
     * 语音/视频时长（秒）
     */
    private Integer duration;

    /**
     * 发送状态：1-发送中 2-已送达 3-已读 4-失败
     */
    private Integer sendStatus;

    /**
     * 发送时间
     */
    private Date sendTime;

    /**
     * 送达时间
     */
    private Date deliverTime;

    /**
     * 阅读时间
     */
    private Date readTime;

    /**
     * 重试次数
     */
    private Integer retryCount;

    /**
     * 是否已撤回（0:否 1:是）
     */
    private Integer isRecalled;

    /**
     * 撤回时间
     */
    private Date recallTime;

    /**
     * 额外数据（JSON格式字符串）
     */
    private String extraData;

    /**
     * 是否删除
     */
    @TableLogic
    private Integer isDeleted;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /**
     * 生成会话ID
     */
    public static String generateConversationId(Long userId1, Long userId2) {
        if (userId1 < userId2) {
            return userId1 + "_" + userId2;
        } else {
            return userId2 + "_" + userId1;
        }
    }
}


