package com.czg.entity.req;

import lombok.Data;
import lombok.NonNull;

/**
 * @author ww
 */
@Data
public class CzgBaseReq {
    //必填范围
    /**
     * 订单标题
     */
    private String subject;

    /**
     * 订单描述 String(256)
     */
    private String body;
    /**
     * 交易金额
     */
    private Long amount;
    /**
     * 货币类型 cny
     */
    private String currency = "cny";
    /**
     * 商户订单号 String(30)
     * 操作方式+雪花算法
     * 收银机客户端  PC+雪花ID
     * 微信小程序 WX+雪花ID
     * 支付宝小程序 ALI+雪花ID
     * PC管理端 WEB+雪花ID
     * APP管理端 APP+雪花ID
     * <p>
     * 退款 re+雪花ID
     */
    private String mchOrderNo;
    /**
     * 门店编号 tb_shop_merchant 的 store_id
     */
    private String storeId;


    //非必填项
    /**
     * 订单备注 String(50)
     */
    private String buyerRemark;
    /**
     * 异步通知地址 String(128)
     * 支付结果异步回调URL,只有传了该值才会发起回调
     */
    private String notifyUrl;
    /**
     * 失效时间 int 15
     * 订单失效时间,单位分钟,默认15小时.
     * 取值范围 5-1440 分钟
     * 订单在(创建时间+失效时间)后失效
     */
    private Integer expiredTime;


    /**
     * 分账模式：
     * 0-该笔订单不允许分账[默认],
     * 1-实时分账
     * 2-延时分账
     */
    private Integer divisionMode;
    /**
     * 分账详情
     */
    private String divisionDetail;
    /**
     * 扩展参数 String(512)
     * 商户扩展参数,回调时会原样返回
     * * 扩展参数
     * * {
     * *     "pay_type": "order/vip"
     * * }
     */
    private String extParam;

    /**
     * 花呗分期数
     * 支付宝交易时可传 而且金额需要大于或等于 100.00元时生效
     * 3/6/12
     */
    private Integer hbFqNum;
    /**
     * 卖家是否承担手续费
     * 100，卖家承担手续费
     * 0，买家承担手续费
     */
    private Integer hbFqPercent;
    /**
     * 是否禁用信用卡
     * -1：不禁用 1：禁用
     * 不传默认为不限制
     */
    private Integer limitPay;

    public CzgBaseReq() {

    }

    public CzgBaseReq(String mchOrderNo, Long amount, String body,
                      String buyerRemark, String extParam) {
        this.mchOrderNo = mchOrderNo;
        this.body = body;
        this.amount = amount;
        this.buyerRemark = buyerRemark;
        this.extParam = extParam;
    }

    public void assignMerchant(@NonNull String storeId, @NonNull String subject, @NonNull String notifyUrl) {
        this.storeId = storeId;
        this.subject = subject;
        this.notifyUrl = notifyUrl;
    }
}
