package com.zhentao.entity;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.util.Date;

/**
 * MongoDB聊天消息实体（NoSQL存储）
 * 用于大数据分析、历史存档、数据挖掘
 */
@Data
@Document(collection = "chat_messages")
public class ChatMessageMongo {
    
    /**
     * MongoDB主键（自动生成）
     */
    @Id
    private String id;
    
    /**
     * 消息ID（来自腾讯云IM）
     */
    @Field("message_id")
    private String messageId;
    
    /**
     * 会话ID（格式：userId小_userId大）
     */
    @Field("conversation_id")
    private String conversationId;
    
    /**
     * 发送者用户ID
     */
    @Field("from_user_id")
    private Long fromUserId;
    
    /**
     * 发送者用户名
     */
    @Field("from_user_name")
    private String fromUserName;
    
    /**
     * 发送者头像URL
     */
    @Field("from_user_avatar")
    private String fromUserAvatar;
    
    /**
     * 接收者用户ID
     */
    @Field("to_user_id")
    private Long toUserId;
    
    /**
     * 接收者用户名
     */
    @Field("to_user_name")
    private String toUserName;
    
    /**
     * 消息类型
     * 1: TEXT-文本消息
     * 2: IMAGE-图片消息
     * 3: VOICE-语音消息
     * 4: VIDEO-视频消息
     * 5: FILE-文件消息
     */
    @Field("message_type")
    private Integer messageType;
    
    /**
     * 消息内容
     */
    @Field("content")
    private String content;
    
    /**
     * 媒体文件URL（图片、语音、视频、文件）
     */
    @Field("media_url")
    private String mediaUrl;
    
    /**
     * 缩略图URL（图片、视频）
     */
    @Field("thumbnail_url")
    private String thumbnailUrl;
    
    /**
     * 媒体文件大小（字节）
     */
    @Field("media_size")
    private Long mediaSize;
    
    /**
     * 媒体时长（秒，用于语音和视频）
     */
    @Field("duration")
    private Integer duration;
    
    /**
     * 发送状态
     * 0: SENDING-发送中
     * 1: SENT-已发送
     * 2: DELIVERED-已送达
     * 3: READ-已读
     * 4: FAILED-发送失败
     */
    @Field("send_status")
    private Integer sendStatus;
    
    /**
     * 发送时间
     */
    @Field("send_time")
    private Date sendTime;
    
    /**
     * 送达时间
     */
    @Field("deliver_time")
    private Date deliverTime;
    
    /**
     * 已读时间
     */
    @Field("read_time")
    private Date readTime;
    
    /**
     * 消息来源
     * TIM: 腾讯云IM同步
     * MANUAL: 手动创建
     */
    @Field("source")
    private String source;
    
    /**
     * 创建时间（MongoDB自动记录）
     */
    @Field("created_at")
    private Date createdAt;
    
    /**
     * 更新时间（MongoDB自动记录）
     */
    @Field("updated_at")
    private Date updatedAt;
    
    /**
     * 扩展字段（JSON格式，用于存储其他信息）
     */
    @Field("extra_data")
    private String extraData;
}

