package com.cool.store.enums;

import com.cool.store.utils.CommonContextUtil;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author zhangchenbiao
 * @FileName: RocketMqGroupEnum
 * @Description:
 * @date 2021-12-22 17:28
 */
public enum RocketMqGroupEnum {

    /**
     * 写在前面 读在前面
     * 同一个group 监听的topic 和 tag必须一致  不然会出现消息丢失问题
     *      即不能以下情况
     *          实例1:
     *              服务A中某个Listener的groupId为GroupA 监听topicA  过滤的消息tagA
     *              服务B中某个Listener的groupId为GroupA 监听topicB  过滤的消息tagA
     *          实例2:
     *              服务A中某个Listener的groupId为GroupA 监听topicA  过滤的消息tagA
     *              服务B中某个Listener的groupId为GroupA 监听topicA  过滤的消息tagB
     */
    /**
     * 事件消息监听
     */
    FEI_SHU_EVENT_LISTENER("fei_shu_event_listener", new ArrayList<>(Arrays.asList(RocketMqTagEnum.USER_EVENT, RocketMqTagEnum.AUTH_SCOPE_CHANGE, RocketMqTagEnum.DEPT_EVENT))),

    ;

    private final String group;

    private final List<RocketMqTagEnum> tagList;


    RocketMqGroupEnum(String group,List<RocketMqTagEnum> tagList) {
        this.group = group;
        this.tagList = tagList;
    }

    public String getDefaultGroup() {
        return group;
    }

    public static String getGroupId(RocketMqGroupEnum groupEnum){
        return groupEnum.group + "_" + CommonContextUtil.getProfileName();
    }

    public static String getTag(RocketMqGroupEnum groupEnum){
        return StringUtils.join(groupEnum.tagList.stream().map(RocketMqTagEnum::getTag).collect(Collectors.toList()),"||");
    }

}
