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

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

import java.util.List;

@Data
public class HnapayApplymentInfo extends ApplymentBasicInfo{

    /** 客服电话 **/
    public String customerPhone;

    /** 是否为线上商户 0-否 1-是 **/
    public String isLineMch;

    /** 线上产品类型 **/
    public String onlineType;

    /** APP名称/⽹站⽹址/公众号名称 **/
    public String onlineName;

    /** APP下载地址及账号信息 **/
    public String onlineTypeInfo;

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

    /** 联行行号 **/
    public String cnapsCode;

    /** 结算账户性质 1-法人 2-非法人 **/
    public String accountNature;

    /** 结算方式 01-T1 02-D1 03-D0 **/
    public String settleWay;

    /** 持卡人手机号 **/
    public String identityPhone;

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

    /** 结算人手持身份证照 **/
    public String holdIdentityPic;

    /** MCC转换 **/
    public String convertMcc() {
        if (this.mccCode.startsWith("0")) {
            return this.mccCode.substring(1, this.mccCode.length());
        }
        return this.mccCode;
    }

    /** 截止日期转换 **/
    public String convertDate(String dateStr) {
        if ("长期".equals(dateStr)) {
            return "9999-99-99";
        }
        return dateStr;
    }

    /** 开户银行转换 **/
    public String convertBankId() {
        return this.cnapsCode.substring(0, 3);
    }

    /** 结算账户类型转换 **/
    public String convertSettType() {
        if (MchApplyment.SETT_ACCOUNT_TYPE_CORPORATE.equals(this.settAccountType)) {
            // 对公
            return "1";
        }else if (MchApplyment.SETT_ACCOUNT_TYPE_PERSONAL.equals(this.settAccountType)) {
            // 对私
            return "2";
        }
        return "";
    }


    /** 支付产品 **/
    public JSONArray getFeeConfig() {
        JSONArray list = new JSONArray();
        List<PaywayFee> paywayFeeList = this.paywayFeeList;
        // 费率设置列表
        if (CollectionUtils.isNotEmpty(paywayFeeList)) {
            /** 创建各类型配置 默认不开通 **/
            // 银联借记卡 <= 1000
            JSONObject feeJson1 = new JSONObject();
            feeJson1.put("openFlag", "0");
            feeJson1.put("rateTypeId", "0307");
            feeJson1.put("channel", "03");  // 银联二维码
            // 银联借记卡 > 1000
            JSONObject feeJson2 = new JSONObject();
            feeJson2.put("openFlag", "0");
            feeJson2.put("rateTypeId", "0308");
            feeJson2.put("channel", "03");  // 银联二维码
            // 银联刷卡借记卡
            JSONObject feeJson3 = new JSONObject();
            feeJson3.put("openFlag", "0");
            feeJson3.put("rateTypeId", "0401");
            feeJson3.put("channel", "04");  // 银联刷卡
            // 银联刷卡贷记卡
            JSONObject feeJson4 = new JSONObject();
            feeJson4.put("openFlag", "0");
            feeJson4.put("rateTypeId", "0402");
            feeJson4.put("channel", "04");  // 银联刷卡
            // 支付宝
            JSONObject feeJson5 = new JSONObject();
            feeJson5.put("openFlag", "0");
            feeJson5.put("rateTypeId", "0101");
            feeJson5.put("channel", "01");  // 支付宝
            // 微信
            JSONObject feeJson6 = new JSONObject();
            feeJson6.put("openFlag", "0");
            feeJson6.put("rateTypeId", "0201");
            feeJson6.put("channel", "02");  // 微信

            paywayFeeList.forEach(item -> {
                // 阶梯费率
                if ((item.getWayCode().startsWith("YSF_") || item.getWayCode().startsWith("UP_")) && PaywayFee.FEE_TYPE_LEVEL.equals(item.getFeeType())) {

                    // 借记卡费率
                    if(CollUtil.isNotEmpty(item.getLevelList())){
                        // 是否开通
                        feeJson1.put("openFlag", "1");
                        // 借记手续费
                        feeJson1.put("feeRate", item.getLevelList().get(0).getFeeRate() + "");
                        // 借记封顶
//                        feeJson1.put("priceCapped", AmountUtil.convertCent2DollarShort(item.getMaxFee()+""));

                        // 是否开通
                        feeJson2.put("openFlag", "1");
                        // 借记手续费
                        feeJson2.put("feeRate", item.getLevelList().get(1).getFeeRate() + "");
                        // 借记封顶
//                        feeJson2.put("priceCapped", AmountUtil.convertCent2DollarShort(item.getMaxFee()+""));
                    }

                    // 贷记卡费率
                    if(item.getCreditCardPaywayFee() != null && CollUtil.isNotEmpty(item.getCreditCardPaywayFee().getLevelList())){

                        // 是否开通
//                        feeJson4.put("openFlag", "1");
                        // 借记手续费
                        feeJson4.put("feeRate", item.getCreditCardPaywayFee().getLevelList().get(0).getFeeRate() + "");
                        // 借记封顶
//                        feeJson4.put("priceCapped", AmountUtil.convertCent2DollarShort(item.getMaxFee()+""));
                    }
                }

                // 支付宝费率
                if (item.getWayCode().startsWith("ALI_") && PaywayFee.FEE_TYPE_SINGLE.equals(item.getFeeType())) {
                    // 是否开通
                    feeJson5.put("openFlag", "1");
                    // 手续费
                    feeJson5.put("feeRate", item.getFeeRate()+"");
                }

                // 微信费率
                if (item.getWayCode().startsWith("WX_") && PaywayFee.FEE_TYPE_SINGLE.equals(item.getFeeType())) {
                    // 是否开通
                    feeJson6.put("openFlag", "1");
                    // 手续费
                    feeJson6.put("feeRate", item.getFeeRate()+"");
                }
            });
            list.add(feeJson1);
            list.add(feeJson2);
            list.add(feeJson3);
            list.add(feeJson4);
            list.add(feeJson5);
            list.add(feeJson6);
        }
        return list;
    }

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