package cn.axzo.msg.center.message.service;

import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
import cn.axzo.msg.center.message.domain.param.MessageTemplateSaveOrUpdateParam;
import cn.axzo.msg.center.service.dto.MessageBaseTemplateDTO;
import cn.axzo.msg.center.service.enums.StatusEnum;
import cn.axzo.msg.center.service.template.request.MessageTemplatePageRequest;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse;
import cn.azxo.framework.common.model.Page;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

/**
 * @description
 *   消息模板管理
 * @author cold_blade
 * @date 2023/10/5
 * @version 1.0
 */
public interface MessageTemplateNewService {

    /**
     * 创建模板
     *
     * @param param 模板内容参数
     */
    String createTemplate(MessageTemplateSaveOrUpdateParam param);

    /**
     * 编辑模板
     *
     * @param param 模板内容参数
     */
    void updateTemplate(MessageTemplateSaveOrUpdateParam param);

    /**
     * 通过模板便阿门查询模板详情
     *
     * @param templateCode 模板编码
     * @return 模板详情信息
     */
    MessageTemplateDetailResponse detail(String templateCode);

    /**
     * 更新模板状态
     *
     * @param operatorId   操作人id
     * @param templateCode 模板编码
     * @param status       新的模板状态
     */
    void updateStatus(Long operatorId, String templateCode, StatusEnum status);

    /**
     * 通过模板编码查询模板信息
     *
     * @param msgTemplateCode 模板编码
     * @return 模板信息
     */
    Optional<MessageTemplateDTO> queryEnableTemplateByCode(String msgTemplateCode);

    /**
     * 通过模板编码查询模板信息
     *
     * @param msgTemplateCodes 模板编码列表
     * @return 模板信息
     */
    List<MessageTemplateDTO> listByTemplateCodes(List<String> msgTemplateCodes);

    /**
     * 分页查询模板数据
     *
     * @param request 分页请求参数
     * @return 模板数据列表
     */
    Page<MessageTemplatePageResponse> page(MessageTemplatePageRequest request);

    /**
     * 分页查询模板基础数据
     *
     * @param request 分页请求参数
     * @return 模板数据列表
     */
    Page<MessageBaseTemplateDTO> pageBaseTemplate(MessageTemplatePageRequest request);

    /**
     * 通过模板编码查询对应的模板
     *
     * @param templateCodes  模板编码集合
     * @return 模板列表
     */
    List<MessageTemplatePageResponse> listByCodes(Collection<String> templateCodes);

    /**
     * 通过模板id获取对应的模板编码
     *
     * @param ids  模板id列表
     * @return 模板编码列表
     */
    List<String> listTemplateCodesByIds(Collection<Long> ids);

    /**
     * 查询需要同步的模板
     * @param templateCode
     * @return
     */
    MessageTemplateDetailResponse querySyncMessageTemplate(String templateCode);

    /**
     * 获取所有消息样式
     * @return
     */
    List<MessageDetailStyle> listTemplateDetailStyles();
}
