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

import com.jeequan.jeepay.core.entity.MchApplyment;
import com.jeequan.jeepay.core.model.params.fuioupay.FuioupayConfig;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;

@EqualsAndHashCode(callSuper = true)
@Data
public class FuioupayApplymentInfo extends ApplymentBasicInfo{

    /** 联系人身份证件号码 */
    protected String contactCertNo;

    /** 证件类型 */
    protected String licenseType;

    /** 营业执照注册地址 */
    protected String licRegisAddr;

    /** 法人入账标识  */
    protected String acntArtifFlag;

    /** 入账证件号  */
    protected String acntCertifId;

    /** 入账证件到期日（格式 yyyyMMdd）   */
    protected String acntCertifExpireDt;

    /** 清算类型   */
    protected String settleTp;

    /** 清算类型扣率   */
    protected String settleTpCd;

    /** 清算时间   */
    protected String settleTs;

    /** 微信支付标识（0：不开通，1：开通）   */
    protected String wxFlag;

    /** 支付宝支付标识（0：不开通，1：开通）   */
    protected String aliFlag;

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

    /** 入账卡开户行联行号  */
    protected String interBankNo;

    /** 入账非法人证明照片 **/
    protected String acntArtifImg;

    /** 组织机构代码证照片 **/
    protected String organizationImg;

    /** 税务登记证照片 **/
    protected String taxRegistrationImg;

    /** 手持证件照片 **/
    protected String handCertificateImg;

    /** 补充资料照片 **/
    protected String additionImg;


    public String convertIdcardEffectBegin() {
        return idcardEffectBegin.replaceAll("-", "");
    }

    public String convertIdcardEffectEnd() {
        return "长期".equals(idcardEffectEnd) ? "20991231" : idcardEffectEnd.replaceAll("-", "");
    }

    public String convertLicenseEffectBegin() {
        return licenseEffectBegin.replaceAll("-", "");
    }

    public String convertLicenseEffectEnd() {
        return "长期".equals(licenseEffectEnd) ? "20991231" : "无有效期".equals(licenseEffectEnd) ? "19000101" : licenseEffectEnd.replaceAll("-", "");
    }

    public String covertAcntCertifExpireDt() {
        return StringUtils.isNotBlank(acntCertifExpireDt) ? "长期".equals(acntCertifExpireDt) ? "20991231" : acntCertifExpireDt.replaceAll("-", "") : "";
    }

    public String covertSettAccountType() {
        return settAccountType.equals(MchApplyment.SETT_ACCOUNT_TYPE_CORPORATE) ? "1" : "2";
    }

    /** 类型转换：标准格式 ---》 接口自定义格式 **/
    public String convertPaywayFeeList2SettleTpCode(String rateType){

        if(this.paywayFeeList == null){
            return null;
        }

        String rate = getRate(rateType);
        if (StringUtils.isBlank(rate)) {
            return null;
        }

        return FuioupayConfig.SETTLE_TP_CODE_MAP.get(rate);
    }

    /** 获取配置的费率 */
    private String getRate(String rateType) {

        String rate = null;

        for (PaywayFee paywayFee : this.paywayFeeList) {

            // 微信费率
            if ("wxpay".equals(rateType) && paywayFee.getWayCode().startsWith("WX_") && PaywayFee.FEE_TYPE_SINGLE.equals(paywayFee.getFeeType())) {
                rate = convertRate(paywayFee.getFeeRate());
                break;

            // 支付宝费率
            } else if ("alipay".equals(rateType) && paywayFee.getWayCode().startsWith("ALI_") && PaywayFee.FEE_TYPE_SINGLE.equals(paywayFee.getFeeType())) {
                rate = convertRate(paywayFee.getFeeRate());
                break;

            // 单笔费率配置
            } else {
                if (PaywayFee.FEE_TYPE_SINGLE.equals(paywayFee.getFeeType())) {
                    rate = convertRate(paywayFee.getFeeRate());
                    break;
                }
            }
        }

        return rate;
    }

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

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