package com.sptg.pay.api.vendor.wxPay.data.unifiedorder;

import com.sptg.pay.api.vendor.wxPay.validate.WxPayDataValidate;
import lombok.Data;

/**
 * 统一下单：参数对象：必填的业务数据
 */
@Data
public class UnifiedBusinessData implements WxPayDataValidate {

    /**
     * 商品描述：商品简单描述，该字段请按照规范传递
     */
    public String body;

    /**
     * 商户订单号：商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*@ ，且在同一个商户号下唯一
     */
    private String 	out_trade_no;

    /**
     * 总金额（int）：订单总金额，单位为分
     */
    private String total_fee;

    /**
     * 终端IP：APP和网页支付提交用户端ip，Native支付填调用微信支付API的机器IP
     */
    private String spbill_create_ip;

    /**
     * 交易类型：取值如下：JSAPI（公众号支付），NATIVE（原生扫码支付），APP（app支付）等
     */
    private String trade_type;

    /**
     * 商品ID。trade_type=NATIVE时（即扫码支付），此参数必传。此参数为二维码中包含的商品ID，商户自行定义。
     */
    private String product_id;

    @Override
    public boolean validate() {
        boolean commonValid = hasText(body) && hasText(out_trade_no) && hasPositive(Integer.valueOf(total_fee)) && hasText(spbill_create_ip) && hasText(trade_type);

        if ("NATIVE".equals(trade_type)) {
            return commonValid && hasText(product_id);
        } else {
            return commonValid;
        }
    }

}
