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

import java.util.Collection;
import java.util.List;
import java.util.Map;

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

    /**
     * 通过分组结点编码路径查询关联的模板编码列表
     *
     * @param leafNodePathCodes 分组结点编码路径列表
     * @return 模板编码列表
     */
    List<String> listMessageTemplateCodes(Collection<String> leafNodePathCodes);

    /**
     * 通过分组结点编码路径查询关联的模板编码列表
     *
     * @param leafNodePathCodes 分组结点编码路径列表
     * @return 模板编码列表
     */
    Map<String, List<String>> groupingByMessageTemplateCodes(Collection<String> leafNodePathCodes);

    /**
     * 模板关联分类
     *
     * @param templateNode    模板编码
     * @param groupNodeCodes  分类结点编码列表
     */
    void templateGroup(String templateNode, Collection<String> groupNodeCodes);

    /**
     * 模板关联分类
     *
     * @param templateGroupMap  模板编码与分类结点编码列表的map
     */
    void templateGroup(Map<String, List<String>> templateGroupMap);

    /**
     * 更新模板的分类关系
     *
     * @param templateNode    模板编码
     * @param groupNodeCodes  新的模板的分类结点编码
     */
    void updateTemplateGroup(String templateNode, Collection<String> groupNodeCodes);

    /**
     * 解除模板关联的分类
     *
     * @param templateNode    模板编码
     */
    void deleteTemplateGroup(String templateNode);

    /**
     * 通过消息模板编码查询其关联的分类的path
     *
     * @param templateCodes 消息模板编码集合
     * @return 模板编码与分类的path列表的映射关系
     */
    Map<String, List<String>> listMessageTemplateGroupPaths(Collection<String> templateCodes);

    /**
     * 解除模板与当前分类的关联关系
     * 注：当模板只关联一个分类时，该关联关系不能解除
     *
     * @param curGroupNodeCode  当前分类结点的编码
     * @param templateCodes     待解除关连关系的模板编码
     */
    void remove(String curGroupNodeCode, Collection<String> templateCodes);

    /**
     * 解除模板与当前分类的关联关系
     * 注：当模板只关联一个分类时，该关联关系不能解除
     *
     * @param srcGroupNodeCode  源分类结点的编码
     * @param tgtGroupNodeCode  目标分类结点的编码
     * @param templateCodes     待变更关连关系的模板编码
     */
    void move(String srcGroupNodeCode, String tgtGroupNodeCode, Collection<String> templateCodes);
}
