package org.springblade.yeePay.entity.saas.trade;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springblade.yeePay.common.YeepayApiConstant;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@ApiModel("交易下单入参")
public class TradeOrderDto {

	/**
	 * *标准商户收付款方案中此参数与收款商户编号一致；
	 * *平台商户收付款方案中此参数为平台商商户编号；
	 * *服务商解决方案中，①标准商户收款时，该参数为标准商户商编 ②平台商收款或平台商入驻商户收款时，该参数为平台商商编。
	 */
	@NotBlank
	@ApiModelProperty(value = "发起方商户编号", required = true)
	private String parentMerchantNo;

	@ApiModelProperty(value = "收款商户商编;单笔收款必传，合单收款场景中请在子单域信息subOrderDetail里提供")
	private String merchantNo;

	@NotBlank
	@ApiModelProperty(value = "商户收款请求号。可包含字母、数字、下划线；需保证在商户端不重复。合单收款场景中，此参数为合单收款请求号", required = true)
	private String orderId;

	@NotBlank
	@ApiModelProperty(value = "订单金额。单位为元，精确到小数点后两位", required = true)
	private String orderAmount;

	@ApiModelProperty(value = "简单描述订单信息或商品简介。单笔收款必传，合单收款场景中请在子单域信息subOrderDetail里提供")
	private String goodsName;

	/**
	 * 分账标识。不传，默认不分账
	 * DELAY_SETTLE：分账
	 * 合单收款场景中，请在子单域信息subOrderDetail里提供
	 */
	@ApiModelProperty(value = "分账标识")
	private YeepayApiConstant.fundProcessType fundProcessType;

	@NotBlank
	@ApiModelProperty(value = "接收支付结果的通知地址", required = true)
	private String notifyUrl;

	@ApiModelProperty(value = "对账备注。商户自定义参数，会展示在交易对账单中")
	private String memo;

	@ApiModelProperty(value = "子单域信息。合单收款场景中，请在此域传入子单信息，支持传入多个子单，实现用户一笔支付多个商户商品最多支持子单条数：99")
	private SubOrderDetail subOrderDetail;

	@ApiModelProperty(value = "订单过期时间，格式为YYYY-MM-DD HH:mm:ss，为空时默认在请求下单120分钟后失效，最长支持30天")
	@DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
	private String expiredTime;

	@ApiModelProperty(value = "支付成功后跳转的URL，如商户指定页面回调地址， 支付完成后会从易宝的支付成功页跳转至商家指定页面，只有走标准收银台的订单此地址才有作用。注意：最大长度200个字符。")
	private String redirectUrl;

	@ApiModelProperty(value = "清算成功服务器回调地址，不传则不通知")
	private String csUrl;

	@ApiModelProperty(value = "自定义参数信息")
	private String businessInfo;

}

@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@ApiModel("子单域信息")
class SubOrderDetail {

	@NotBlank
	@ApiModelProperty(value = "商户编号;收款商户编号")
	private String merchantNo;

	@NotBlank
	@ApiModelProperty(value = "商户收款请求号;商户系统内部单号，建议使用数字、大小写字母的组合")
	private String orderId;

	@NotBlank
	@ApiModelProperty(value = "订单金额;商户收款金额，数字格式最多 2 位小数")
	private String orderAmount;

	@ApiModelProperty(value = "商品信息")
	private String goodsName;

	/**
	 * 不传，默认不分账
	 * DELAY_SETTLE：分账
	 */
	@ApiModelProperty(value = "分账标识")
	private YeepayApiConstant.fundProcessType fundProcessType;

}
