package com.qqchen.deploy.backend.notification.service;

import com.qqchen.deploy.backend.framework.service.IBaseService;
import com.qqchen.deploy.backend.notification.dto.NotificationTemplateDTO;
import com.qqchen.deploy.backend.notification.dto.template.NotificationTemplateQuery;
import com.qqchen.deploy.backend.notification.entity.NotificationTemplate;

import java.util.Map;

/**
 * 通知模板Service接口
 *
 * @author qqchen
 * @since 2025-11-12
 */
public interface INotificationTemplateService extends IBaseService<NotificationTemplate, NotificationTemplateDTO, NotificationTemplateQuery, Long> {

    /**
     * 渲染模板
     *
     * @param templateCode 模板编码
     * @param params       模板参数
     * @return 渲染后的内容
     */
    String renderTemplate(String templateCode, Map<String, Object> params);

    String renderByCode(String templateCode, Map<String, Object> params);

    String renderById(Long id, Map<String, Object> params);

    /**
     * 根据模板ID渲染标题
     *
     * @param id     模板ID
     * @param params 模板参数
     * @return 渲染后的标题，如果模板没有标题则返回null
     */
    String renderTitleById(Long id, Map<String, Object> params);

    /**
     * 根据编码获取模板
     *
     * @param code 模板编码
     * @return 模板DTO
     */
    NotificationTemplateDTO getByCode(String code);

    /**
     * 检查编码是否存在
     *
     * @param code 模板编码
     * @param id   排除的ID（编辑时使用）
     * @return 是否存在
     */
    boolean existsByCode(String code, Long id);

    /**
     * 启用通知模板
     *
     * @param id 模板ID
     */
    void enable(Long id);

    /**
     * 禁用通知模板
     *
     * @param id 模板ID
     */
    void disable(Long id);
}
