// oms/src/services/messageTemplateService.ts

import { MessageTemplate, IMessageTemplate, TemplateType } from "../models/messageTemplateModel";

// 导出消息模板服务对象
export const messageTemplateService = {
  /**
   * 创建一个新的消息模板。
   * @param templateData 模板数据，包含 templateName, templateType, messageTitle, messageContent, image, bigger, action, param, extend。
   * @returns 新创建的模板文档。
   */
  createTemplate: async (templateData: Partial<IMessageTemplate>): Promise<IMessageTemplate> => {
    const newTemplate = new MessageTemplate(templateData);
    return await newTemplate.save();
  },

  /**
   * 根据模板名称获取模板。
   * @param templateName 模板的唯一名称。
   * @returns 匹配的模板文档，如果未找到则为 null。
   */
  getTemplateByName: async (templateName: string): Promise<IMessageTemplate | null> => {
    return await MessageTemplate.findOne({ templateName });
  },

  /**
   * 根据模板类型获取所有模板。
   * @param templateType 模板的类型（数字枚举）。
   * @returns 匹配的模板文档数组。
   */
  getTemplatesByType: async (templateType: TemplateType): Promise<IMessageTemplate[]> => {
    return await MessageTemplate.find({ templateType }).sort({ updatedAt: -1 });
  },

  /**
   * 获取所有消息模板。
   * @returns 所有模板文档的数组。
   */
  getAllTemplates: async (): Promise<IMessageTemplate[]> => {
    return await MessageTemplate.find({}).sort({ updatedAt: -1 });
  },

  /**
   * 更新一个已存在的模板。
   * @param templateName 要更新的模板名称。
   * @param updateData 更新的数据，包含 templateType, messageTitle, messageContent, image, bigger, action, param, extend等。
   * @returns 更新后的模板文档，如果未找到则为 null。
   */
  updateTemplate: async (templateName: string, updateData: Partial<IMessageTemplate>): Promise<IMessageTemplate | null> => {
    return await MessageTemplate.findOneAndUpdate({ templateName }, updateData, { new: true });
  },

  /**
   * 删除一个模板。
   * @param templateName 要删除的模板名称。
   * @returns 删除操作的结果。
   */
  deleteTemplate: async (templateName: string): Promise<{ deletedCount?: number }> => {
    return await MessageTemplate.deleteOne({ templateName });
  },
};
