"use strict";
// oms/src/controllers/messageTemplateController.ts
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const messageTemplateService_1 = require("../services/messageTemplateService");
const messageTemplateModel_1 = require("../models/messageTemplateModel");
const mongoose_1 = __importDefault(require("mongoose"));
class MessageTemplateController {
    /**
     * 创建新的消息模板。
     * POST /api/message-templates
     */
    async createTemplate(req, res) {
        try {
            const { templateName, messageTitle, messageContent, templateType } = req.body;
            // 验证必需字段
            if (!templateName || !messageTitle || !messageContent || typeof templateType === "undefined") {
                res.status(400).json({ message: "templateName, messageTitle, messageContent 和 templateType 都是必需的。" });
                return;
            }
            // 验证 templateType 是否为有效的枚举值
            if (typeof templateType !== "number" || !(templateType in messageTemplateModel_1.TemplateType)) {
                res.status(400).json({ message: "templateType 必须是有效的数字枚举值。" });
                return;
            }
            const newTemplate = await messageTemplateService_1.messageTemplateService.createTemplate(req.body);
            res.status(201).json(newTemplate);
        }
        catch (error) {
            if (error.code === 11000) {
                res.status(409).json({ message: "模板名称已存在。", error: error.message });
            }
            else if (error instanceof mongoose_1.default.Error.ValidationError) {
                res.status(400).json({ message: "验证错误。", error: error.message });
            }
            else {
                res.status(500).json({ message: "创建模板时出错。", error: error.message });
            }
        }
    }
    /**
     * 根据名称获取消息模板。
     * GET /api/message-templates/:templateName
     */
    async getTemplateByName(req, res) {
        try {
            const { templateName } = req.params;
            const template = await messageTemplateService_1.messageTemplateService.getTemplateByName(templateName);
            if (template) {
                res.status(200).json(template);
            }
            else {
                res.status(404).json({ message: "未找到指定的模板。" });
            }
        }
        catch (error) {
            res.status(500).json({ message: "获取模板时出错。", error: error.message });
        }
    }
    /**
     * 获取所有消息模板，并支持按模板类型筛选。
     * GET /api/message-templates
     */
    async getAllTemplates(req, res) {
        try {
            const { templateType } = req.query;
            let templates;
            if (templateType) {
                // 如果提供了 templateType，则按类型筛选
                const type = parseInt(templateType, 10);
                if (isNaN(type) || !(type in messageTemplateModel_1.TemplateType)) {
                    res.status(400).json({ message: "无效的 templateType 参数。" });
                    return;
                }
                templates = await messageTemplateService_1.messageTemplateService.getTemplatesByType(type);
            }
            else {
                // 否则获取所有模板
                templates = await messageTemplateService_1.messageTemplateService.getAllTemplates();
            }
            res.status(200).json(templates);
        }
        catch (error) {
            res.status(500).json({ message: "获取所有模板时出错。", error: error.message });
        }
    }
    /**
     * 更新一个消息模板。
     * PUT /api/message-templates/:templateName
     */
    async updateTemplate(req, res) {
        try {
            const { templateName } = req.params;
            const updateData = req.body;
            if (updateData.templateType !== undefined && (typeof updateData.templateType !== "number" || !(updateData.templateType in messageTemplateModel_1.TemplateType))) {
                res.status(400).json({ message: "templateType 必须是有效的数字枚举值。" });
                return;
            }
            const updatedTemplate = await messageTemplateService_1.messageTemplateService.updateTemplate(templateName, updateData);
            if (updatedTemplate) {
                res.status(200).json(updatedTemplate);
            }
            else {
                res.status(404).json({ message: "未找到指定的模板。" });
            }
        }
        catch (error) {
            res.status(500).json({ message: "更新模板时出错。", error: error.message });
        }
    }
    /**
     * 删除一个消息模板。
     * DELETE /api/message-templates/:templateName
     */
    async deleteTemplate(req, res) {
        try {
            const { templateName } = req.params;
            const result = await messageTemplateService_1.messageTemplateService.deleteTemplate(templateName);
            if (result.deletedCount && result.deletedCount > 0) {
                res.status(204).send();
            }
            else {
                res.status(404).json({ message: "未找到指定的模板。" });
            }
        }
        catch (error) {
            res.status(500).json({ message: "删除模板时出错。", error: error.message });
        }
    }
}
const messageTemplateController = new MessageTemplateController();
exports.default = messageTemplateController;
