package com.zhentao.entity;

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

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

/**
 * 红娘与用户聊天消息实体类
 * 存储在MySQL中
 */
@Data
@TableName("matchmaker_chat_message")
public class MatchmakerChatMessage implements Serializable {

    private static final long serialVersionUID = 1L;

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

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

    /**
     * 会话ID（格式：m_红娘ID_用户ID）
     */
    private String conversationId;

    /**
     * 红娘ID
     */
    private Long matchmakerId;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 发送方类型：1-用户发送 2-红娘发送
     */
    private Integer senderType;

    /**
     * 消息类型：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;

    /**
     * 是否已撤回（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;

    /**
     * 发送方类型常量
     */
    public static final int SENDER_TYPE_USER = 1;       // 用户发送
    public static final int SENDER_TYPE_MATCHMAKER = 2; // 红娘发送

    /**
     * 生成会话ID
     * 格式：m_红娘ID_用户ID
     */
    public static String generateConversationId(Long matchmakerId, Long userId) {
        return "m_" + matchmakerId + "_" + userId;
    }

    /**
     * 从TIM会话ID解析红娘ID
     * TIM会话ID格式：C2Cm_红娘ID 或 m_红娘ID
     */
    public static Long parseMatchmakerIdFromTimId(String timUserId) {
        if (timUserId == null) return null;
        String id = timUserId.replace("C2C", "");
        if (id.startsWith("m_")) {
            try {
                return Long.parseLong(id.substring(2));
            } catch (NumberFormatException e) {
                return null;
            }
        }
        return null;
    }

    /**
     * 判断TIM用户ID是否是红娘
     */
    public static boolean isMatchmaker(String timUserId) {
        if (timUserId == null) return false;
        String id = timUserId.replace("C2C", "");
        return id.startsWith("m_");
    }
}
