package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.resp;

import com.wzj.soopin.transaction.enums.easypay.AddCalcType;
import com.wzj.soopin.transaction.enums.easypay.BillingCycle;
import com.wzj.soopin.transaction.enums.easypay.CardType;
import com.wzj.soopin.transaction.enums.easypay.FeeType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 基础订单信息
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class JsapiRespOrderInfo {
    /**
     * 商户费率信息
     */
    private Empty mchtRateList;
    /**
     * 商户订单号，商户生成请求易生的流水号
     */
    private String orgTrace;
    /**
     * 易生订单号，易生生成后上送渠道的订单号
     */
    private String outTrace;
    /**
     * 渠道订单号，渠道生成返回给易生的订单号，例如微信、支付宝订单号
     */
    private String pcTrace;
    /**
     * 产品订单号，易生系统内流转的订单号求易生的流水号
     */
    private String productTrace;
    /**
     * 交易金额，单位分
     */
    private Long transAmount;
    /**
     * 银联订单号
     */
    private String unTrace;

    /**
     * 商户费率信息
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    private static class Empty {

        /**
         * 附加手续费计算方式
         */
        private AddCalcType addCalcType;
        /**
         * 附加手续费值，单位：分
         */
        private String addCalcVal;
        /**
         * 交易金额最高值，单位：分
         */
        private String amtHighLt;
        /**
         * 交易金额最低值，单位：分
         */
        private String amtLowLt;
        /**
         * 结算周期
         */
        private BillingCycle billingCycle;
        /**
         * 手续费计算方式
         */
        private AddCalcType calcType;
        /**
         * 手续费费率值，按笔单位为分；按比例为百万比
         */
        private String calcVal;
        /**
         * 卡机构编号，见F.10
         */
        private String cardIssuerCode;
        /**
         * 卡类型
         */
        private CardType cardType;
        /**
         * 生效时间
         */
        private String effDatetime;
        /**
         * 失效时间
         */
        private String expDatetime;
        /**
         * 手续费处理模式
         */
        private String feeCalcMode;
        /**
         * 手续费最高值，单位：分
         */
        private String feeHighLimit;
        /**
         * feeId
         */
        private String feeId;
        /**
         * 手续费承担机构
         */
        private String feeInst;
        /**
         * 手续费最低值，单位：分
         */
        private String feeLowLimit;
        /**
         * 手续费费用类型
         */
        private AddCalcType feeMode;
        /**
         * 手续费处理模式
         */
        private FeeType feeType;
        /**
         * 分期期数
         */
        private String instalNum;
        /**
         * 是否需求配置费率
         */
        private String isNeedConfigFee;
        /**
         * 是否允许退货
         */
        private AddCalcType isRefundFee;
        /**
         * 优先级
         */
        private String levelOrder;
        /**
         * 内部商户号
         */
        private String mchtCode;
    }
}
