package com.xindazhou.framework.social.enums;

import cn.hutool.core.util.ArrayUtil;
import com.xindazhou.framework.common.core.ArrayValuable;

import java.util.Arrays;

/**
 * 社交平台的类型枚举
 *
 * @author xdz
 */
public enum SocialTypeEnum implements ArrayValuable<Integer> {

    /**
     * Gitee
     *

     */
    GITEE(10, "GITEE"),
     
    DINGTALK(20, "DINGTALK"),

    
    WECHAT_ENTERPRISE(30, "WECHAT_ENTERPRISE"),
    
    WECHAT_MP(31, "WECHAT_MP"),
    
    WECHAT_OPEN(32, "WECHAT_OPEN"),
    
    WECHAT_MINI_PROGRAM(34, "WECHAT_MINI_PROGRAM"),
     
    ALIPAY_MINI_PROGRAM(40, "ALIPAY"),
    ;

    public static final Integer[] ARRAYS = Arrays.stream(values()).map(SocialTypeEnum::getType).toArray(Integer[]::new);

    /**
     * 类型
     */
    private final Integer type;
    /**
     * 类型的标识
     */
    private final String source;

    /**
     * 构造函数（枚举必须手动写，Lombok 的 @AllArgsConstructor 在枚举上不工作）
     */
    SocialTypeEnum(Integer type, String source) {
        this.type = type;
        this.source = source;
    }

    /**
     * 获取类型（Lombok 的 @Getter 在枚举上可能不工作，手动添加）
     */
    public Integer getType() {
        return type;
    }

    /**
     * 获取来源（Lombok 的 @Getter 在枚举上可能不工作，手动添加）
     */
    public String getSource() {
        return source;
    }

    @Override
    public Integer[] array() {
        return ARRAYS;
    }

    public static SocialTypeEnum valueOfType(Integer type) {
        return ArrayUtil.firstMatch(o -> o.getType().equals(type), values());
    }

}
