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 com.jeequan.jeepay.core.utils.AmountUtil;
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 RuipayApplymentInfo extends ApplymentBasicInfo {

    /** 入网方式 **/
    public String accessMode;

    /** 经营名称 **/
    public String merNameAbbr;

    /** 注册地址 **/
    public String regAddr;

    /** 经营范围 **/
    public String manaScop;

    /** 微信类目编号 **/
    public String wxlm;

    /** 账户性质  00：对公，01：对私 **/
    public String accountProp;

    /**
     * 结算账户类型 小微不传 ，
     * 1：法人，2：非法人，3：对公
     * 账户性质为‘对公’时，传‘3’，对私时，传‘1’或‘2’
     **/
    public String settleType;

    /** 开户行编码 **/
    public String headBankNo;

    /** 开户支行信息 **/
    public String openBankMsg;


    //******费率信息**********

    /** 结算类型 01：T1, 02:S0, 03:D1，04：D1+ **/
    public String settType;

    //******其他信息**********

    /** 终端数量 数值类型，小微商户最大20，普通商户最大9 **/
    public String termNum;

    /** 结算业务类型 01：T1, 02:S0, 03:D1，04：D1+ **/
    public String serviceType;

    /** 是否开通退款  0：是，1：否 **/
    public String tradeTypeReimburse;

    /** 是否进行微信实名认证 1：是，2：否 **/
    public String certificationType;
    /** 经营类型 1:门店场所 2: 流动经营/便民服务 **/
    public String microBizType;

    /** 是否进行支付宝实名认证 1：是，2：否 **/
    public String alipayCertificationType;
    /** 店铺注册地址 **/
    public String regAddress;


    //******商户资料**********

     /** 商户协议照片 **/
    public String protocolPhoto;

    /** 营业场景照片一 **/
    public String businessScenePhoto1Img;

    /** 营业场景照片二 **/
    public String businessScenePhoto2Img;

    /** 商户附属协议 **/
    public String mchAffiliateAgreementImg;

    /** 结算授权书 **/
    public String settleAuthLetterImg;

    /** 商户协议类型 0：纸质协议（默认）
     1：电子协议（需要开通权限） **/
    public String pactType;

    /** 协议接收人 **/
    public String agreementName;

    /** 协议接收人电话 **/
    public String agreementPhone;

    /** 结算人是否为法人 1-是 0-否 **/
    public String isLegalInfo;

    /** 联系人是否为法人 1-是 0-否 **/
    public String contactSameToLegal;

    /** 受益人是否同法人 0:是  1：否 **/
    public String ifBenefit;
    /** 受益人姓名 **/
    public String benefitCredPeople;
    /** 受益人证件号 **/
    public String benefitCredNo;
    /** 受益人身份证人像面照片 **/
    public String benefitCred1Img;
    /** 受益人身份证国徽面照片 **/
    public String benefitCred2Img;
    /** 受益人有效期开始 **/
    public String benefitCredStartTime;
    /** 受益人有效期结束 **/
    public String benefitCredTime;
    /** 受益人地址 **/
    public String benefitOperateAddr;


    // 商户类型转换 1-个体 2-企业 7-小微商户
    public String coverMerchantType() {
        Byte merchantType = this.merchantType;
        String merType = "";
        switch (merchantType) {
            case 1: {
                merType = "7";
                break;
            }
            case 2: {
                merType = "1";
                break;
            }
            case 3: {
                merType = "2";
                break;
            }
            default:
                merType = "6";
        }
        return merType;
    }

    // mcc转换
    public String coverMcc() {
        if (StringUtils.isNotEmpty(this.mccCode)) {
            String[] code = this.mccCode.split("_");
            if (code[1].length() == 3) {
                return "0" + code[1];
            }
            return code[1];
        }
        return null;
    }

    // 有效期转换
    public String coverDateTime(String dateStr) {
        if ("长期".equals(dateStr)) {
            return "";
        } else {
            return dateStr.replace("-", "");
        }
    }

    // 结算账户类型转换
    public String coverSettAccountType() {
        if (MchApplyment.MERCHANT_TYPE_INDIVIDUAL == this.merchantType) {
            return "01";
        }else {
            if ("B".equals(this.settAccountType)) {
                return "00";
            } else {
                return "01";
            }
        }
    }

    // 开户支行信息转换  例：四平市古城农村信用合作社_401243301421
    public String[] coverBranchBankMsg(String openBankMsg) {
        if (StringUtils.isEmpty(openBankMsg)) {
            return null;
        } else {
            return openBankMsg.split("_");
        }
    }

    public void convertApplymentPayFee(JSONObject paperJson) {
        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_")) {
                        paperJson.put("wxDebitRate", convertRate(item.getFeeRate()) + "");
                    }
                    // 支付宝费率
                    if (item.getWayCode().startsWith("ALI_")) {
                        paperJson.put("zfbDebitRate", convertRate(item.getFeeRate()) + "");
                    }
                }

                // 阶梯费率
                if ((item.getWayCode().startsWith("YSF_") || item.getWayCode().startsWith("UP_")) && PaywayFee.FEE_TYPE_LEVEL.equals(item.getFeeType())) {
                    // 借记卡费率
                    if (CollUtil.isNotEmpty(item.getLevelList())) {
                        // 借记卡手续费费率（单笔交易≤1000元） 参数单位为‰
                        // 借记手续费
                        paperJson.put("qrDebitRate", convertRate(item.getLevelList().get(0).getFeeRate()) + "");
                        // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
                        // 借记手续费
                        paperJson.put("debitRate", convertRate(item.getLevelList().get(1).getFeeRate()) + "");
                        // 借记封顶 分
                        paperJson.put("debitTop", AmountUtil.convertCent2Dollar(item.getMaxFee()) + "");
                    }
                    // 贷记卡费率
                    if (item.getCreditCardPaywayFee() != null && CollUtil.isNotEmpty(item.getCreditCardPaywayFee().getLevelList())) {
                        // 银联云闪付贷记卡费率（单笔交易≤1000元） 参数单位为‰
                        paperJson.put("qrCreditRate", convertRate(item.getCreditCardPaywayFee().getLevelList().get(0).getFeeRate()) + "");
                        // 贷记卡手续费费率（单笔交易>1000元） 参数单位为‰
                        paperJson.put("creditRate", convertRate(item.getCreditCardPaywayFee().getLevelList().get(1).getFeeRate()) + "");
                    }
                }
            });
        }
    }


    public static String convertRate(BigDecimal rate) {
        return rate == null ? null : String.valueOf(rate.multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP));
    }

    public String coverBankAreaCode() {
        if (this.getSettAccountBankBranchAreaCode().size() >= 3) {
            return this.getSettAccountBankBranchAreaCode().get(2)+"";
        }else {
            return this.getSettAccountBankBranchAreaCode().get(1)+"";
        }
    }

    @Override
    public String bankBranchNo() {
        String[] strings = coverBranchBankMsg(openBankMsg);
        if (strings == null) {
            return null;
        } else {
            return strings[1];
        }
    }
}
