package com.ruoyi.common.enums;

/** old data
 * testCard(0, "测试卡"),
 vipCard(1, "vip卡"),
 eCard(2, "电子卡"),
 experienceCard(3, "体验卡"), //志愿填报期间不能使用填报功能
 */
public enum CardType {
    oldVipCard(00, "旧版vip卡"),
    eCard(0, "电子卡"),
    vipCard(5, "vip卡"),
    dzVipCard(6, "单招vip卡"),
    testCard(8, "测试卡"),//类型为8，且8开头，只有6位
    experienceCard(9, "体验卡"), //志愿填报期间不能使用填报功能
    ;

    private Integer value;
    private String remark;

    private CardType(Integer value, String remark) {
        this.value = value;
        this.remark = remark;
    }

    public Integer getValue() {
        return value;
    }

    public String getRemark() {
        return remark;
    }

    public static CardType getByValue(String value) {
        for (CardType o : CardType.values()) {
            if (o.getValue().equals(value)) {
                return o;
            }
        }
        return null;
    }

    public static CardType getByType(Integer type) {
        for (CardType o : CardType.values()) {
            if (o.getValue()==type) {
                return o;
            }
        }
        return null;
    }


    /**
     * 测试卡
     * @param value
     * @return
     */
    public static Boolean isTestCard(Object value) {
        if(value instanceof String){
            if (testCard.name().equalsIgnoreCase(String.valueOf(value).trim())) {
                return true;
            }
        }

        if(value instanceof Integer){
            if (testCard.getValue()==Integer.valueOf(String.valueOf(value).trim())) {
                return true;
            }
        }

        if(value instanceof Integer){
            if (testCard.getValue().intValue()==Integer.valueOf(String.valueOf(value).trim()).intValue()) {
                return true;
            }
        }

        return false;
    }

    /**
     *
     * @param value-->cardNo
     * @return
     */
    public static Boolean isOldVipCard(Object value) {
        if(value instanceof String){
            if (String.valueOf(value).trim().length()==12&&String.valueOf(value).trim().startsWith(oldVipCard.getValue().toString())) {
                return true;
            }
        }

        if(value instanceof Integer){
            if (oldVipCard.getValue()==Integer.valueOf(String.valueOf(value).trim())) {
                return true;
            }
        }

        if(value instanceof Integer){
            if (oldVipCard.getValue().intValue()==Integer.valueOf(String.valueOf(value).trim()).intValue()) {
                return true;
            }
        }

        return false;
    }

    /**
     * vip卡
     * @param value
     * @return
     */
    public static Boolean isVipCard(Object value) {
        String v = String.valueOf(value).trim();
        if(value instanceof String){
            if (vipCard.name().equalsIgnoreCase(v) || dzVipCard.name().equalsIgnoreCase(v)) {
                return true;
            }
        }

        if(value instanceof Integer){
            Integer iVal = Integer.parseInt(v);
            if (vipCard.getValue().equals(iVal) || dzVipCard.getValue().equals(iVal)) {
                return true;
            }
            if (vipCard.getValue().intValue()==iVal.intValue() || dzVipCard.getValue().intValue() == iVal.intValue()) {
                return true;
            }
        }
        return false;
    }

    /**
     * 电子卡
     * @param value
     * @return
     */
    public static Boolean isECard(Object value) {
        if(value instanceof String){
            if (eCard.name().equalsIgnoreCase(String.valueOf(value).trim())) {
                return true;
            }
        }

        if(value instanceof Integer){
            if (eCard.getValue()==Integer.valueOf(String.valueOf(value).trim())) {
                return true;
            }
        }

        if(value instanceof Integer){
            if (eCard.getValue().intValue()==Integer.valueOf(String.valueOf(value).trim()).intValue()) {
                return true;
            }
        }

        return false;
    }

    /**
     * 体验卡
     * @param value
     * @return
     */
    public static Boolean isExperienceCard(Object value) {
        if(value instanceof String){
            if (experienceCard.name().equalsIgnoreCase(String.valueOf(value).trim())) {
                return true;
            }
        }

        if(value instanceof Integer){
            if (experienceCard.getValue()==Integer.valueOf(String.valueOf(value).trim())) {
                return true;
            }
        }

        if(value instanceof Integer){
            if (experienceCard.getValue().intValue()==Integer.valueOf(String.valueOf(value).trim()).intValue()) {
                return true;
            }
        }

        return false;
    }

    /**
     * 前端登录卡
     * @param cardNo
     * @return
     */
    public static Boolean isFrontCard(String cardNo,String type) {
        if (AccessFromType.isFrontAccess(type)&&(cardNo.startsWith(eCard.value.toString()) || cardNo.startsWith(vipCard.value.toString())
                || cardNo.startsWith(testCard.value.toString()) || cardNo.startsWith(experienceCard.value.toString())
                || cardNo.startsWith(dzVipCard.value.toString()) || cardNo.startsWith(oldVipCard.value.toString()))
                && (cardNo.length() == 8 || cardNo.length() == 6|| (cardNo.length() == 12&&cardNo.startsWith("00")))) {
            return true;
        }
        return false;
    }

    public static Boolean isMatchCardNo2Type(String cardNo,Integer type) {
        CardType cardType = getByType(type);
        if(null==cardType){
            return false;
        }
        if(cardNo.startsWith(String.valueOf(cardType.getValue()))){
            return true;
        }
        return false;
    }

}
