package com.fs.erp.dto.wdt;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.List;

/**
 * ERP旺店通单个退款单信息 DTO
 * <p>
 * 代表一个具体的平台售后退款/退货单据。
 * </p>
 *
 * @author xdd
 * @since 2025-02-27
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ErpWdtApiRefund {

    /**
     * 平台ID
     * <p>
     * 输入固定值127。
     * 必须: 是
     * 类型: smallint(6)
     * </p>
     */
    @JsonProperty("platform_id")
    private Integer platformId;

    /**
     * 店铺编号
     * <p>
     * 代表店铺所有属性的唯一编码，用于店铺区分，ERP内支持自定义（ERP店铺界面设置），用于推送指定店铺原始退款单据信息。
     * 必须: 是
     * 类型: varchar
     * </p>
     */
    @JsonProperty("shop_no")
    private String shopNo;

    /**
     * 平台销售订单号
     * <p>
     * 平台订单单号（与推送trade_push的tid保持一致，对应旺店通ERP内原始单号）。
     * 必须: 是
     * 类型: varchar
     * </p>
     */
    @JsonProperty("tid")
    private String tid;

    /**
     * 平台退款/退货单号
     * <p>
     * 平台退款/退货单单号，保证唯一。
     * 必须: 是
     * 类型: varchar(40)
     * </p>
     */
    @JsonProperty("refund_no")
    private String refundNo;

    /**
     * 平台售后类型
     * <p>
     * type=1：退款(未发货退款)；type=2：退款不退货；type=3：退货。
     * 必须: 是
     * 类型: int
     * </p>
     */
    @JsonProperty("type")
    private Integer type;

    /**
     * 平台售后状态
     * <p>
     * 可选值：wait_seller_agree（申请退款），seller_refuse（拒绝退款），closed（退款关闭），goods_returning（待退货），goods_receiving（待收货），success（退款成功）。
     * 必须: 是
     * 类型: varchar
     * </p>
     */
    @JsonProperty("status")
    private String status;

    /**
     * 退款金额
     * <p>
     * 退款的总金额。
     * 必须: 否
     * 类型: decimal(19,4)
     * </p>
     */
    @JsonProperty("refund_fee")
    private BigDecimal refundFee;

    /**
     * 买家昵称
     * <p>
     * 买家昵称（不传该字段，默认取原始订单上客户网名）。
     * 必须: 是
     * 类型: varchar(100)
     * </p>
     */
    @JsonProperty("buyer_nick")
    private String buyerNick;

    /**
     * 单据创建时间
     * <p>
     * 单据创建时间, 时间格式：yyyy-MM-dd HH:mm:ss。
     * 必须: 是
     * 类型: datetime
     * </p>
     */
    @JsonProperty("refund_time")
    private String refundTime; // 使用String类型以匹配指定的格式

    /**
     * 退款原因
     * <p>
     * 客户申请退款的原因。
     * 必须: 否
     * 类型: varchar(255)
     * </p>
     */
    @JsonProperty("reason")
    private String reason;

    /**
     * 备注
     * <p>
     * 退款单相关的备注信息。
     * 必须: 否
     * 类型: varchar(255)
     * </p>
     */
    @JsonProperty("desc")
    private String desc; // 注意：'desc' 在某些场景下可能是关键字，但这里保持与JSON一致

    /**
     * 物流单号
     * <p>
     * 退货时的物流单号（如需维护退货物流单号，与logistics_name物流公司名称同时使用）。
     * 必须: 否
     * 类型: varchar(40)
     * </p>
     */
    @JsonProperty("logistics_no")
    private String logisticsNo;

    /**
     * 物流公司名称
     * <p>
     * 退货时的物流公司名称。
     * 必须: 否
     * 类型: varchar(40)
     * </p>
     */
    @JsonProperty("logistics_name")
    private String logisticsName;

    /**
     * 售后子订单列表
     * <p>
     * 包含该退款单涉及的子订单信息。
     * 必须: 是
     * </p>
     */
    @JsonProperty("order_list")
    private List<ErpWdtRefundOrder> orderList;
}
