// oms/src/models/messageTemplateModel.ts

import mongoose, { Schema, Document } from "mongoose";

// 定义多语言字符串类型，键为语言代码 (如 'en', 'zh-cn', 'es' 等)，值为对应的字符串
interface ILocalizedStrings {
  [key: string]: string;
}

// 定义模板类型的枚举，确保数据的一致性
export enum TemplateType {
  OTHER = 0,
  NEW_USER_WELCOM = 1, // 欢迎与引导
  ENCOURAGE_AND_REWARD = 2, // 鼓励与奖励
  DAILY_REWARD_REMINDER = 3, // 每日奖励提醒
  PERSONALIZED_RECOMMENDATION = 4, // 个性化推荐
  NEW_CONTENT_REMINDER = 5, // 新画作提醒
  HOT_CONTENT_RECOMMENDATION = 6, // 热门画作推荐
  LIMITED_TIME_EVENT_REMINDER = 7, // 限时活动提醒
  HOLIDAY_CELEBRATION = 8, // 节日/特殊日庆贺
  COMPLETION_ENCOURAGEMENT = 9, // 完成度鼓励
  SOCIAL_SHARING_ENCOURAGEMENT = 10, // 社交分享鼓励
  UNACTIVE_USER_RECALL = 11, // 长时间不活跃用户召回
  NEW_FEATURE_INTRODUCTION = 12, // 新功能介绍
  CHALLENGE_TASK_REMINDER = 13, // 挑战任务提醒
}

// 定义模板类型和中文描述的映射，方便在应用中使用
export const TEMPLATE_TYPE_MAP: Record<TemplateType, string> = {
  [TemplateType.OTHER]: "其他",
  [TemplateType.NEW_USER_WELCOM]: "欢迎与引导",
  [TemplateType.ENCOURAGE_AND_REWARD]: "鼓励与奖励",
  [TemplateType.DAILY_REWARD_REMINDER]: "每日奖励提醒",
  [TemplateType.PERSONALIZED_RECOMMENDATION]: "个性化推荐",
  [TemplateType.NEW_CONTENT_REMINDER]: "新画作提醒",
  [TemplateType.HOT_CONTENT_RECOMMENDATION]: "热门画作推荐",
  [TemplateType.LIMITED_TIME_EVENT_REMINDER]: "限时活动提醒",
  [TemplateType.HOLIDAY_CELEBRATION]: "假日/节日主题",
  [TemplateType.COMPLETION_ENCOURAGEMENT]: "完成度鼓励",
  [TemplateType.SOCIAL_SHARING_ENCOURAGEMENT]: "社交分享鼓励",
  [TemplateType.UNACTIVE_USER_RECALL]: "长时间不活跃用户召回",
  [TemplateType.NEW_FEATURE_INTRODUCTION]: "新功能介绍",
  [TemplateType.CHALLENGE_TASK_REMINDER]: "挑战任务提醒",
};

// 定义消息模板的接口，并新增字段
export interface IMessageTemplate extends Document {
  templateName: string;
  templateType: TemplateType; // 新增字段：模板类型
  description: string; // 描述
  messageTitle: ILocalizedStrings;
  messageContent: ILocalizedStrings;
  image?: string; // 通知图片URL
  bigger?: boolean; // 消息是否允许展开
  action?: string; // 客户端收到消息后的行为
  param?: string; // 消息参数
  extend?: string; // 消息扩展参数
  createdAt: Date;
  updatedAt: Date;
}

// 定义消息模板的 Mongoose Schema，并新增字段
const MessageTemplateSchema: Schema = new Schema(
  {
    templateName: { type: String, required: true, unique: true, trim: true }, // 模板的唯一名称，方便在代码中引用
    templateType: {
      type: Number,
      required: true,
      enum: Object.values(TemplateType).filter((value) => typeof value === "number"), // 使用枚举值来约束此字段
      default: TemplateType.OTHER,
      index: true,
    },
    description: { type: String }, // 描述
    messageTitle: { type: Object, of: String, required: true }, // 消息标题，使用嵌套对象支持多语言
    messageContent: { type: Object, of: String, required: true }, // 消息内容，使用嵌套对象支持多语言
    image: { type: String }, // 通知图片URL
    bigger: { type: Boolean, default: false }, // 消息是否允许展开
    action: { type: String, default: "go/app" }, // 客户端收到消息后的行为
    param: { type: String }, // 消息参数
    extend: { type: String }, // 消息扩展参数
  },
  {
    timestamps: true, // 自动添加 createdAt 和 updatedAt 字段
  }
);

// 为模板名称字段创建索引以提高查询效率
MessageTemplateSchema.index({ templateName: 1 });

export const MessageTemplate = mongoose.model<IMessageTemplate>("MessageTemplate", MessageTemplateSchema);
