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 java.util.List;

@Data
public class UmpayApplymentInfo extends ApplymentBasicInfo{

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

    /** 座机电话 **/
    private String merchantPhone;

    /** 执照证件类型 NATIONAL_LEGAL-营业执照 NATIONAL_LEGAL_MERGE-多证合一 **/
    private String licenseType;

    /** 0-非法人 1-法人 2-单位 **/
    private String cardType;

    /** 非法人清算授权函 **/
    private String certificatePic;

    /** 开户行联行行号 **/
    private String unitedBankNo;

    /** 商户特殊行业资质证明 **/
    private String qualificationImg;

    /** 商户特殊行业资质证明 **/
    private String elseImg;

    /** 商户经营类型 MICRO_TYPE_STORE-门店 MICRO_TYPE_MOBILE-流动经营/便民服务 MICRO_TYPE_ONLINE-线上商品/服务交易 **/
    private String microBizType;

    /** 注册资金 **/
    private String capital;


    /** 商户名称转换 **/
    public String convertMerchantName() {
        if (MchApplyment.MERCHANT_TYPE_PERSONAL == this.merchantType) {
            // 小微商户名称：商户_+法人姓名
            return "商户_" + this.getIdcardName();
        }else {
            // 商户全称
            return this.mchFullName;
        }
    }

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

    public String convertDate(String dateStr) {
        if ("长期".equals(dateStr)) {
            return "9999-12-31";
        }
        return dateStr;
    }

    /** 支付产品 **/
    public JSONObject convertProduct() {
        JSONObject feeJson = new JSONObject();
        List<PaywayFee> paywayFeeList = this.paywayFeeList;
        // 费率设置列表
        if (paywayFeeList != null && CollectionUtils.isNotEmpty(paywayFeeList)) {
            paywayFeeList.stream().forEach(item -> {
                // 阶梯费率
                if ((item.getWayCode().startsWith("YSF_") || item.getWayCode().startsWith("UP_")) && PaywayFee.FEE_TYPE_LEVEL.equals(item.getFeeType())) {
                    feeJson.put("unionOpen", "1");
                    // 借记卡费率
                    if(CollUtil.isNotEmpty(item.getLevelList())){
                        // 借记手续费 1000以下费率
                        feeJson.put("unionDebitRate", item.getLevelList().get(0).getFeeRate() + "");
                        // 借记手续费 1000以上费率
                        feeJson.put("unionUpDebitRate", item.getLevelList().get(1).getFeeRate() + "");
                        // 借记封顶
                        feeJson.put("unionDebitLimit", AmountUtil.convertCent2Dollar(item.getMaxFee()));
                        feeJson.put("unionUpDebitLimit", AmountUtil.convertCent2Dollar(item.getMaxFee()));
                    }

                    // 贷记卡费率
                    if(item.getCreditCardPaywayFee() != null && CollUtil.isNotEmpty(item.getCreditCardPaywayFee().getLevelList())){
                        // 1000以下费率
                        feeJson.put("unionCreditRate", item.getCreditCardPaywayFee().getLevelList().get(0).getFeeRate() + "");
                        // 1000以上费率
                        feeJson.put("unionUpCreditRate", item.getCreditCardPaywayFee().getLevelList().get(1).getFeeRate() + "");
                    }
                }

                // 支付宝费率
                if (item.getWayCode().startsWith("ALI_") && PaywayFee.FEE_TYPE_SINGLE.equals(item.getFeeType())) {
                    feeJson.put("aliMerchantRate", item.getFeeRate());
                }

                // 微信费率
                if (item.getWayCode().startsWith("WX_") && PaywayFee.FEE_TYPE_SINGLE.equals(item.getFeeType())) {
                    feeJson.put("wxMerchantRate", item.getFeeRate());
                }

            });
        }
        return feeJson;
    }


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