
package com.czg.order.dto;

import cn.hutool.core.util.StrUtil;
import com.czg.order.entity.OrderDetail;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * 退单Dto。
 *
 * @author ww
 * @since 2025-02-13
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderInfoRefundDTO implements Serializable {

    @NotNull(message = "订单Id不能为空")
    private Long orderId;

    /**
     * 退单总金额
     * 支付后的 退款金额 (累计总金额 不可超过 （支付金额pay_amount - 已退金额refund_amount）)
     * <p>
     * 部分商品退款为 退单数量*单价* 订单的discount_ratio  向下取整 该全退时 为该条详情总金额 * 订单的discount_ratio 向下取整
     * 整单退款 为支付金额pay_amount
     * <p>
     * 支付前退款为 退菜 金额为 单价*数量 如果有部分打包 优先退非打包 (退打包时 记得计算打包费)
     */
    @NotNull(message = "退单金额不能为空")
    private BigDecimal refundAmount;
    //操作人
    private String operator;

    /**
     * 退款金额 默认为 退单数量*单价* 订单 discount_ratio
     * 整单退款 为订单orderAmount
     * 如果自定义退款金额 则金额不进行校验 直接退款
     */
    private boolean modify;
    /**
     * 是否是现金退款
     */
    private boolean cash;
    /**
     * 是否打印退菜/退款票
     */
    private boolean print = true;
    /**
     * 是否退库存
     */
    private boolean refundStock;

    private String refundReason;

    private String pwd;

    /**
     * 退单明细
     * id: orderDetailId
     * num: 退单数量
     * returnAmount: 退单金额
     */
    private List<OrderDetail> refundDetails;

    public String getRefundReason() {
        if (StrUtil.isNotBlank(refundReason)) {
            refundReason = refundReason.trim().replaceAll(" ", ",");
            return refundReason;
        } else {
            return "";
        }
    }
}
