package com.yiqi.common.utils.pay;

import com.yiqi.common.enums.PayType;
import com.yiqi.common.exception.ServiceException;
import org.apache.commons.lang.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PayCodeUtils {

    /**
     * 判断支付通道
     *
     * @param payCode
     * @return
     */
    public static String getPayTypeByCode(String payCode) {
        if (payCode == null || payCode.length() < 16) {
            throw new ServiceException("不是正确的付款码");
        }
        if (judgeContainsStr(payCode)) {
            throw new ServiceException("请检查出示的是否是付款码");
        }
        String[] wechat = {"10", "11", "12", "13", "14", "15"};
        String[] alipay = {"25", "26", "27", "28", "29", "30"};
        //会员小程序支付码
        if (StringUtils.startsWithAny(payCode, wechat)) {
            return PayType.WECHAT.getCode();
        } else if (StringUtils.startsWithAny(payCode, alipay)) {
            return PayType.ALIPAY.getCode();
        } else if (StringUtils.startsWith(payCode, "62")) {
            return PayType.UNIONPAY.getCode();
        } else if (payCode.length() == 12 && StringUtils.startsWith(payCode, "23")) {
            return PayType.BALANCE.getCode();
        } else {
            throw new ServiceException("不是正确的付款码");
        }
    }

    /**
     * 使用正则表达式来判断字符串中是否包含字母
     *
     * @param str 待检验的字符串
     * @return 返回是否包含
     * true: 包含字母 ;false 不包含字母
     */
    public static boolean judgeContainsStr(String str) {
        String regex = ".*[a-zA-Z]+.*";
        Matcher m = Pattern.compile(regex).matcher(str);
        return m.matches();
    }

}
