"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MessageRecord = void 0;
const mongoose_1 = require("mongoose");
// Mongoose schema for MessageRecord
const messageRecordSchema = new mongoose_1.Schema({
    // 目标用户uid
    uid: {
        type: String,
        required: true,
        index: true, // Index for faster lookup by user
    },
    // 关联消息活动, 关联到消息活动表（messageActivity），表明次消息记录来自于那个宣传活动；有可能是空值，对于点对点发送消息的情况可能没有关联的活动
    activityId: {
        type: mongoose_1.Schema.Types.ObjectId,
        ref: "MessageActivity",
        required: false, // It's optional as per design
        index: true, // Added index for better query performance by activity
    },
    // 关联消息活动名称
    activityName: {
        type: String,
        index: true,
    },
    // 关联的消息模版id，也可能是空值，对于点对点发送消息的情况可能没有模版
    templateId: {
        type: mongoose_1.Schema.Types.ObjectId,
        ref: "MessageTemplate",
        required: false, // It's optional as per design
    },
    // 关联的消息模板名称
    templateName: {
        type: String,
        index: true,
    },
    // 关联的策略id，也可能是空值，对于点对点发送消息的情况可能没有模版
    strategyId: {
        type: mongoose_1.Schema.Types.ObjectId,
        ref: "MessageTemplate",
        required: false, // It's optional as per design
    },
    // 关联的消息策略名称
    strategyName: {
        type: String,
        index: true,
    },
    // 已经确定了具体语言的消息标题，必须
    title: {
        type: String,
        required: true,
        index: true,
    },
    // 已经确定了具体语言的消息内容，必须
    content: {
        type: String,
        required: true,
    },
    // 图片url， 非必须
    image: {
        type: String,
        index: true,
    },
    // 消息通知的消息是否点击展开查看大图。没有图片的情况下一般就设置成false
    bigger: {
        type: Boolean,
        default: false,
    },
    // 定义客户端收到消息后的行为，如 go/app ， open/art 参看前文
    action: {
        type: String,
    },
    // 消息参数
    param: {
        type: String,
    },
    // 消息扩展参数
    extend: {
        type: String,
    },
    // 新增字段：国家代码
    cc: {
        type: String,
        index: true,
    },
    // 0-未发送；1-发送成功；2-已送达；3-已打开；-1-发送失败
    status: {
        type: Number,
        default: 0, // 0-not sent; 1-sent successfully; 2-delivered; 3-opened; -1-send failed
        index: true,
    },
    // true: 在前台； false: 在后台
    inforeground: {
        type: Boolean,
    },
    // 捕捉firebase admin sdk api调用失败的信息填充到这里
    errno: {
        type: String,
    },
    // 消息发送成功的回执，其实就是FCM用于标识消息的id
    fcmReceipt: {
        type: String,
        index: true, // Index for faster lookup by FCM receipt
    },
    // 新增字段
    plannedSendAt: {
        type: Date,
        index: true,
    },
    actualSendAt: {
        type: Date,
        index: true,
    },
    deliveredAt: {
        type: Date,
        index: true,
    },
    openedAt: {
        type: Date,
        index: true,
    },
}, {
    timestamps: true, // Automatically adds createdAt and updatedAt
});
// Added compound index for common queries by user and status
messageRecordSchema.index({ uid: 1, status: 1 });
exports.MessageRecord = (0, mongoose_1.model)("MessageRecord", messageRecordSchema);
