package com.wzj.soopin.im.domain.event;

import lombok.Getter;
import com.wzj.soopin.im.domain.vo.SysMessageVo;
import org.springframework.context.ApplicationEvent;

/**
 * 消息事件
 *
 * @author ruoyi
 */
@Getter
public class MessageEvent extends ApplicationEvent {

    private final SysMessageVo message;
    private final Long userId;
    private final String userIdStr;

    /**
     * 使用 Long 类型用户 ID 创建消息事件
     */
    public MessageEvent(Object source, SysMessageVo message, Long userId) {
        super(source);
        this.message = message;
        this.userId = userId;
        this.userIdStr = userId != null ? String.valueOf(userId) : null;
    }

    /**
     * 使用 String 类型用户 ID 创建消息事件
     */
    public MessageEvent(Object source, SysMessageVo message, String userIdStr) {
        super(source);
        this.message = message;
        this.userIdStr = userIdStr;

        // 尝试转换为 Long 类型
        Long parsedUserId = null;
        try {
            if (userIdStr != null) {
                parsedUserId = Long.parseLong(userIdStr);
            }
        } catch (NumberFormatException e) {
            // 无法解析为 Long 类型，保持 userId 为 null
        }
        this.userId = parsedUserId;
    }

    /**
     * 创建 MessageEvent 实例（支持 String 类型用户ID）
     *
     * @param source    事件源
     * @param message   消息对象
     * @param userIdStr 用户ID (String类型)
     * @return MessageEvent 实例
     */
    public static MessageEvent createWithStringUserId(Object source, SysMessageVo message, String userIdStr) {
        return new MessageEvent(source, message, userIdStr);
    }
}
