package com.seer.teach.pay.api.refund.dto;

import com.seer.teach.common.enums.pay.RefundTypeEnum;
import lombok.Builder;
import lombok.Data;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

@Builder
@Data
public class RefundOrderRequestDTO {

    /**
     * 【商户订单号】 商户下单时传入支付模块的商户系统内部订单号。
     */
    @NotBlank(message = "商户订单号不能为空")
    private String merchantOrderSn;

    /**
     * 【商户退款单号】 商户系统内部的退款单号，商户系统内部唯一。
     */
    private String merchantRefundSn;

    /**
     * 【退款原因】 退款的原因说明。
     */
    private String refundReason;

    /**
     * 【退款金额】 退款金额，单位为分。
     */
    @NotNull(message = "退款金额不能为空")
    private Long refundAmount;

    /**
     * 【原订单总金额】 原支付订单的总金额，单位为分。
     */
    private Long totalAmount;

    /**
     * 【支付渠道编码】 支付渠道的编码，如 WECHAT_JSAPI、COIN 等。
     */
    private String channelCode;
    
    /**
     * 【用户ID】 发起退款的用户ID。
     */
    private Integer userId;

    /**
     * 【退款类型】 退款类型，如 AFTER_SALE、ORDER_CANCEL、COIN_RECHARGE 等。
     */
    private RefundTypeEnum refundType;
}