package org.springblade.yeePay.entity;

import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;

import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

/**
 * @author: lianghanqiang
 * @description:
 * @since: 7/27/21 -- 5:44 PM
 */
@Data
@Builder
public class ChargeDto {
	@NotBlank
	@ApiModelProperty(value = "商户收款请求号。商户系统内部生成的订单号，需要保持在同一个商户下唯一",required = true)
	String orderId;

	@NotNull
	@ApiModelProperty(value = "订单金额。业务上是必须参数，单位： 元， 两位小数， 最低 0.01",required = true)
	@DecimalMin(value = "0.01",message = "订单金额不可以小于0.01啊")
	Double orderAmount;

	@Pattern(message = "输入格式为 yyyy-MM-dd HH:mm:ss",regexp = "^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\\d):[0-5]?\\d:[0-5]?\\d$")
//	@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
	@ApiModelProperty(value = "订单截止时间。格式\"yyyy-MM-dd HH:mm:ss\"\n" +
		"不传默认一天",example = "yyyy-MM-dd HH:mm:ss")
	String expiredTime;

	@ApiModelProperty("场景\n" +
		"OFFLINE:线下")
	String scene;


	@ApiModelProperty(value = "\t\n" +
		"商家的公众号id")
	String appId;

	@ApiModelProperty(value = "业务上是必须参数，支付成功服务器回调地址：支付成功通知、超时通知、失败通知。",example = "https://notify.merchant.com/xxx")
	String notifyUrl;

	@ApiModelProperty("自定义对账备注。商户可以自定义自身业务需要使用的字段： 如对账时定义该订单应属的会计科目")
	String memo;

	@NotBlank
	@ApiModelProperty(value = "商品名称，如：旺仔牛奶",required = true)
	String goodsName;

	@ApiModelProperty("分账订单标记\n" +
		"DELAY_SETTLE:需要分账\n" +
		"REAL_TIME:不需要分账")
	String fundProcessType;

	@NotBlank
	@ApiModelProperty(value = "支付方式类型" +
		"MERCHANT_SCAN:付款码支付",required = true)
	String payWay;

	@NotBlank
	@ApiModelProperty(value = "渠道类型\n" +
		"WECHAT:微信\n" +
		"ALIPAY:支付宝\n" +
		"UNIONPAY:银联云闪付\n" +
		"APPLEPAY:苹果闪付",required = true)
	String channel;

	@NotBlank
	@ApiModelProperty(value = "获取的用户授权码\n" +
		"(ApplePay对应paymentToken解密后的emvData)",required =true)
	String authCode;

	@NotBlank
	@ApiModelProperty(value = "用户真实IP地址",required = true,example = "123.123.123.123")
	String userIp;

	@NotBlank
	@ApiModelProperty(value = "终端号id",required = true,example = "00000000")
	String terminalId;

	@ApiModelProperty("商家终端场景信息\n" +
		"示例值：{\"storeId\":\"门店id\",\"storeName\":\"门店名称\",\"operatorId\":\"商户操作员编号\",\"alipayStoreId\":\"支付宝的店铺编号\",\"areaCode\":\"门店行政区划码\",\"address\":\"门店详细地址\"}")
	String terminalSceneInfo;

	@ApiModelProperty("渠道指定支付信息。支持花呗分期")
	String channelSpecifiedInfo;

	@ApiModelProperty("渠道优惠信息。订单需参与渠道指定优惠时传入，如微信单品券")
	String channelPromotionInfo;

	@ApiModelProperty("限制付款人信息。特殊行业需要支付实名场景下使用，如保险的特殊险种需要付款人和投保人实名条件下可以使用")
	String identityInfop;

	@ApiModelProperty("是否限制贷记卡\n" +
		"Y:仅借记卡可以支付\n" +
		"N:借贷记卡均可支付")
	String limitCredit;

	@ApiModelProperty("下单接口返回的token\n" +
		"如果商户使用先下单再支付模式，请传入下单接口返回的token")
	String token;

	@ApiModelProperty("易宝订单号\n" +
		"如果商户使用先下单再支付模式，请传入下单接口返回的易宝订单号\n" +
		"同时传入易宝订单号和token，将以易宝订单号为准")
	String uniqueOrderNo;

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

	@ApiModelProperty("ApplePay支付密码，免密情况下可不填，对应paymentToken解密后的encryptedPINData")
	String encryptedPINData;

	@ApiModelProperty("卡号，ApplePay对应paymentToken解密后的emvData")
	String payerAccountNo;

	@ApiModelProperty("合作银行信息：\n" +
		"JSON字符串；已获批开通账户通的平台商可传入此字段，否则请勿传值\n" +
		"accountProvider:合作银行\n" +
		"\u2028token:商户与银行约定令牌")
	String accountLinkInfo;
}
