package com.yiqi.order.domain.dto;

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

import java.math.BigDecimal;

/**
 * @author xiaohei
 * @date 2024/1/2
 */
@Data
public class PayRefundDTO {

    public PayRefundDTO() {
    }

    /**
     * @param payType      支付方式
     * @param outTradeNo   订单号
     * @param refundAmount 退款金额
     * @param refundNo     退款单号（可选）
     * @param refundReason 退款原因（可选）
     */
    public PayRefundDTO(String payType, String orderNo, BigDecimal refundAmount, String refundNo, String outTradeNo, String refundReason) {
        this.payType = payType;
        this.outTradeNo = outTradeNo;
        this.orderNo = orderNo;
        this.refundAmount = refundAmount;
        this.refundNo = refundNo;
        this.refundReason = refundReason;
    }

    private Long storeId;

    @ApiModelProperty("支付方式")
    private String payType;

    @ApiModelProperty("商户订单号。 订单支付时传入的商户订单号，商家自定义且保证商家系统中唯一。与支付宝交易号 trade_no 不能同时为空。")
    private String orderNo;

    @ApiModelProperty("支付交易订单号。 订单支付时传入的商户订单号，商家自定义且保证商家系统中唯一。与支付宝交易号 trade_no 不能同时为空。")
    private String outTradeNo;

    @ApiModelProperty("退款金额。 需要退款的金额，该金额不能大于订单金额，单位为元，支持两位小数。 注：如果正向交易使用了营销，" +
            "该退款金额包含营销金额，支付宝会按业务规则分配营销和买家自有资金分别退多少，默认优先退买家的自有资金。如交易总金额100元，" +
            "用户支付时使用了80元自有资金和20元无资金流的营销券，商家实际收款80元。如果首次请求退款60元，则60元全部从商家收款资金扣除退回" +
            "给用户自有资产；如果再请求退款40元，则从商家收款资金扣除20元退回用户资产以及把20元的营销券退回给用户" +
            "（券是否可再使用取决于券的规则配置）。")
    private BigDecimal refundAmount;


    private BigDecimal totalAmount;

    @ApiModelProperty("退款请求号。 标识一次退款请求，需要保证在交易号下唯一，如需部分退款，则此参数必传。 注：针对同一次退款请求，" +
            "如果调用接口失败或异常了，重试时需要保证退款请求号不能变更，防止该笔交易重复退款。支付宝会保证同样的退款请求号多次请求只会退一次。" +
            "必选条件部分退款时必选")
    private String outRequestNo;

    /**
     * 退款单号
     */
    private String refundNo;

    @ApiModelProperty("退款原因说明。 商家自定义，将在会在商户和用户的pc退款账单详情中展示")
    private String refundReason;
}
