package com.jeequan.jeepay.core.model.params.aliaqf;

import com.alibaba.fastjson.JSON;
import com.jeequan.jeepay.core.annotate.ChannelMchId;
import com.jeequan.jeepay.core.constants.ChannelMchIdTypeEnum;
import com.jeequan.jeepay.core.entity.TransferWallet;
import com.jeequan.jeepay.core.model.params.IsvParams;
import com.jeequan.jeepay.core.utils.StringKit;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

/*
 * 支付宝安全发 isv参数定义
 *
 * @author xiaoyu
 *
 * @date 2023/4/3 10:10
 */
@Data
public class AliaqfIsvParams extends IsvParams {

    /** 是否沙箱环境 */
    private Byte sandbox;

    /** pid */
    @ChannelMchId(type = ChannelMchIdTypeEnum.ISV_NO)
    private String pid;

    /** appId */
    private String appId;

    /** privateKey */
    private String privateKey;

    /** alipayPublicKey */
    private String alipayPublicKey;

    /** 签名方式 **/
    private String signType;

    /** 是否使用证书方式 **/
    private Byte useCert;

    /** app 证书 **/
    private String appPublicCert;

    /** 支付宝公钥证书（.crt格式） **/
    private String alipayPublicCert;

    /** 支付宝根证书 **/
    private String alipayRootCert;

    /**
     * （下级模板）到支付宝月限额(分)
     */
    private String subZfbMonthMax;

    /**
     * （下级模板）到支付宝日限额(分)
     */
    private String subZfbDayMax;

    /**
     * （下级模板）个人支付宝单笔限额(分)
     */
    private String subZfbPriOnceMax;

    /**
     * （下级模板）企业支付宝单笔限额(分)
     */
    private String subZfbCorOnceMax;

    /**
     * （下级模板）到银行卡月限额(分)
     */
    private String subBankCardMonthMax;

    /**
     * （下级模板）到银行卡日限额(分)
     */
    private String subBankCardDayMax;

    /**
     * （下级模板）到对私银行卡单笔限额(分)
     */
    private String subBankCardPriOnceMax;

    /**
     * （下级模板）到对公银行卡单笔限额(分)
     */
    private String subBankCardCorOnceMax;

    /**
     * （总）到支付宝月限额(分)
     */
    private String zfbMonthMax;

    /**
     * （总）到支付宝日限额(分)
     */
    private String zfbDayMax;

    /**
     * （总）个人支付宝单笔限额(分)
     */
    private String zfbPriOnceMax;

    /**
     * （总）企业支付宝单笔限额(分)
     */
    private String zfbCorOnceMax;

    /**
     * （总）到银行卡月限额(分)
     */
    private String bankCardMonthMax;

    /**
     * （总）到银行卡日限额(分)
     */
    private String bankCardDayMax;

    /**
     * （总）到对私银行卡单笔限额(分)
     */
    private String bankCardPriOnceMax;

    /**
     * （总）到对公银行卡单笔限额(分)
     */
    private String bankCardCorOnceMax;

    @Override
    public String deSenData() {

        AliaqfIsvParams isvParams = this;
        if (StringUtils.isNotBlank(isvParams.privateKey)) {
            isvParams.setPrivateKey(StringKit.autoDesensitization(isvParams.privateKey));
        }
        if (StringUtils.isNotBlank(isvParams.alipayPublicKey)) {
            isvParams.setAlipayPublicKey(StringKit.autoDesensitization(isvParams.alipayPublicKey));
        }

        return JSON.toJSONString(isvParams);
    }

    /**
     * 配置额度
     * @param wallet
     */
    public void initQuota(TransferWallet wallet) {
        wallet.setWxMonthMax(0L);
        wallet.setWxDayMax(0L);
        wallet.setWxPriOnceMax(0L);
        wallet.setWxCorOnceMax(0L);
        wallet.setBankCardCorOnceMax(Long.parseLong(getSubBankCardCorOnceMax()));
        wallet.setBankCardPriOnceMax(Long.parseLong(getSubBankCardPriOnceMax()));
        wallet.setBankCardMonthMax(Long.parseLong(getSubBankCardMonthMax()));
        wallet.setBankCardDayMax(Long.parseLong(getSubBankCardDayMax()));
        wallet.setZfbCorOnceMax(Long.parseLong(getSubZfbCorOnceMax()));
        wallet.setZfbPriOnceMax(Long.parseLong(getSubZfbPriOnceMax()));
        wallet.setZfbMonthMax(Long.parseLong(getSubZfbMonthMax()));
        wallet.setZfbDayMax(Long.parseLong(getSubZfbDayMax()));
    }
}
