package com.jeequan.jeepay.core.model.applyment;

import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.entity.MchApplyment;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.util.List;

@Data
public class LeshuapayApplymentInfo extends ApplymentBasicInfo {

    /** 客服电话*/
    private String servicePhone;

    /** 证件类型 */
    private Integer credentialType;

    /** 	账户类型
     1：个人账户
     2：公司账户*/
    private Integer acctType;

    /** 结算标志*/
    private Integer acctLegalFlag;

    /** 开户支行联行号*/
    private String acctUnionpay;

    /** 开户名
     法人结算：与法人姓名一致；
     企业账户：与营业执照注册名称一致*/
    private String acctHolder;

    /** 结算人证件
     个人账户必传，非法人结算只能是身份证，法人结算与法人证件号一致*/
    private String acctIdCardNo;

    /** O	结算人证件类型
     与法人证件参数相同，默认身份证*/
    private String acctIdCardType;

    /**银行预留号码*/
    private String acctMobile;

    /**非法人结算授权书*/
    private String nonLegSettleAuthPic;

    /**经营场所内设照片*/
    private String insidePic;

    /**商户协议照*/
    private String agreementPic;

    /**商户子类型*/
    private Integer companyChildType;

    /** mcc **/
    public String convertMcc() {
        if (StringUtils.isNotEmpty(this.mccCode)) {
            String[] split = this.mccCode.split("_");
            return split[2];
        }
        return null;
    }

    /** 商户类型  1: 个人   2: 个  3: 企业*/
    public Integer convertMerchantType(){
        if(this.merchantType == MchApplyment.MERCHANT_TYPE_PERSONAL){
            return 1;
        }else if(this.merchantType == MchApplyment.MERCHANT_TYPE_INDIVIDUAL){
            return 2;
        }else if(this.merchantType == MchApplyment.MERCHANT_TYPE_ENTERPRISE){
            return 3;
        }
        return 1;
    }

    /** 费率转换 **/
    public JSONObject convertApplymentPayFee() {
        JSONObject feeJsonObject = new JSONObject();
        List<PaywayFee> paywayFeeList = this.paywayFeeList;
        // 费率设置列表
        if (paywayFeeList != null && CollectionUtils.isNotEmpty(paywayFeeList)) {
            paywayFeeList.stream().forEach(item -> {
                if (PaywayFee.FEE_TYPE_SINGLE.equals(item.getFeeType())) {
                    // 微信费率
                    if (item.getWayCode().startsWith("WX_")) {
                        feeJsonObject.put("wxRate", convertRate(item.getFeeRate()));
                    }
                    // 支付宝费率
                    if (item.getWayCode().startsWith("ALI_")) {
                        feeJsonObject.put("aliRate", convertRate(item.getFeeRate()));
                    }
                }

                // 阶梯费率
                if ((item.getWayCode().startsWith("YSF_") || item.getWayCode().startsWith("UP_")) && PaywayFee.FEE_TYPE_LEVEL.equals(item.getFeeType())) {
                    // 是否配了阶梯费率
                    feeJsonObject.put("jtSupport", "yes");
                    // 借记卡费率
                    if (CollUtil.isNotEmpty(item.getLevelList())) {
                        // <1000
                        feeJsonObject.put("jLittleRate", convertRate(item.getLevelList().get(0).getFeeRate()));
                        // >1000
                        feeJsonObject.put("jBigRate", convertRate(item.getLevelList().get(1).getFeeRate()));
                        // 借记卡手续费最低值 0.6元 传60,0000
                        feeJsonObject.put("jMinCharge", item.getMinFee() == 0 ? 0 : item.getMinFee() + "0000");
                        // 借记卡手续费最高值
                        feeJsonObject.put("jMaxCharge", item.getMaxFee() == 0 ? 0 : item.getMaxFee() + "0000");
                    }
                    // 贷记卡费率（信用卡）
                    if (item.getCreditCardPaywayFee() != null && CollUtil.isNotEmpty(item.getCreditCardPaywayFee().getLevelList())) {
                        // <1000
                        feeJsonObject.put("dLittleRate", convertRate(item.getLevelList().get(0).getFeeRate()));
                        // >1000
                        feeJsonObject.put("dBigRate", convertRate(item.getLevelList().get(1).getFeeRate()));
                        // 贷记卡手续费最低值
                        feeJsonObject.put("dMinCharge", item.getMinFee() == 0 ? 0 : item.getMinFee() + "0000");
                        // 贷记卡手续费最高值
                        feeJsonObject.put("dMaxCharge", item.getMaxFee() == 0 ? 0 : item.getMaxFee() + "0000");
                    }
                }
            });
        }
        return feeJsonObject;
    }

    // 60 表示0.6%
    public static String convertRate(BigDecimal rate) {
        return rate == null ? null : String.valueOf(rate.multiply(new BigDecimal(10000)).setScale(0, BigDecimal.ROUND_HALF_UP));
    }

    @Override
    public String bankBranchNo() {
        return acctUnionpay;
    }
}
