package com.zanxiang.game.module.sdk.enums;

import com.zanxiang.game.module.sdk.service.pay.AliPayService;
import com.zanxiang.game.module.sdk.service.pay.MiPayService;
import com.zanxiang.game.module.sdk.service.pay.PayBaseService;
import com.zanxiang.game.module.sdk.service.pay.WxPayService;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Objects;

/**
 * @author : lingfeng
 * @time : 2022-09-28
 * @description : 支付方式枚举
 */
@Getter
@AllArgsConstructor
public enum PayTypeEnum {

    /**
     * 支付宝
     */
    ALI_PAY(1, "ALI_PAY", AliPayService.class),

    /**
     * 微信支付
     */
    WX_PAY(2, "WX_PAY", WxPayService.class),

    /**
     * 米大师支付
     */
    MI_PAY(3, "MI_PAY", MiPayService.class);

    /**
     * 支付方式
     */
    private final Integer payType;

    /**
     * 支付类前缀
     */
    private final String name;

    /**
     * 支付实现类
     */
    private final Class<? extends PayBaseService> clazz;

    /**
     * 根据书城key获取枚举
     *
     * @param payType : 支付类型
     * @return : 支付类型枚举
     */
    public static PayTypeEnum getByPayType(Integer payType) {
        for (PayTypeEnum payTypeEnum : PayTypeEnum.values()) {
            if (payTypeEnum.getPayType().equals(payType)) {
                return payTypeEnum;
            }
        }
        return null;
    }

    /**
     * 根据书城key获取名称
     *
     * @param payType : 支付类型
     * @return : 支付类型枚举
     */
    public static String getByPayType(Long payType) {
        if (payType == null) {
            return null;
        }
        for (PayTypeEnum payTypeEnum : PayTypeEnum.values()) {
            if (Objects.equals(payType.intValue(), payTypeEnum.getPayType())) {
                return payTypeEnum.getName();
            }
        }
        return null;
    }
}
