package com.tashow.cloud.pay.controller.admin.order.vo;

import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;

import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

/**
 * 支付订单 Base VO，提供给添加、修改、详细的子 VO 使用
 * 如果子 VO 存在差异的字段，请不要添加到这里，影响 Swagger 文档生成
 *
 * @author aquan
 */
@Data
public class PayOrderBaseVO {

    // 应用编号，必填，示例：1024
    @NotNull(message = "应用编号不能为空")
    private Long appId;

    // 渠道编号，示例：2048
    private Long channelId;

    // 渠道编码，示例：wx_app
    private String channelCode;

    // 商户订单编号，必填，示例：888
    @NotNull(message = "商户订单编号不能为空")
    private String merchantOrderId;

    // 商品标题，必填，示例：土豆
    @NotNull(message = "商品标题不能为空")
    private String subject;

    // 商品描述，必填，示例：我是土豆
    @NotNull(message = "商品描述不能为空")
    private String body;

    // 异步通知地址，必填，示例：http://127.0.0.1:48080/pay/notify
    @NotNull(message = "异步通知地址不能为空")
    private String notifyUrl;

    // 支付金额，单位：分，必填，示例：10
    @NotNull(message = "支付金额，单位：分不能为空")
    private Long price;

    // 渠道手续费，单位：百分比，示例：10
    private Double channelFeeRate;

    // 渠道手续金额，单位：分，示例：100
    private Integer channelFeePrice;

    // 支付状态，必填，示例：1
    @NotNull(message = "支付状态不能为空")
    private Integer status;

    // 用户 IP，必填，示例：127.0.0.1
    @NotNull(message = "用户 IP不能为空")
    private String userIp;

    // 订单失效时间，必填
    @NotNull(message = "订单失效时间不能为空")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime expireTime;

    // 订单支付成功时间
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime successTime;

    // 支付成功的订单拓展单编号，示例：50
    private Long extensionId;

    // 支付订单号，示例：2048888
    private String no;

    // 退款总金额，单位：分，必填，示例：10
    @NotNull(message = "退款总金额，单位：分不能为空")
    private Long refundPrice;

    // 渠道用户编号，示例：2048
    private String channelUserId;

    // 渠道订单号，示例：4096
    private String channelOrderNo;

}
