
package com.czg.order.dto;

import cn.hutool.core.util.StrUtil;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * 订单表 实体类。
 *
 * @author ww
 * @since 2025-02-13
 */
@Data

@NoArgsConstructor
@AllArgsConstructor
public class OrderInfoAddDTO implements Serializable {
    /**
     * 上菜方式
     * 待起菜 PENDING_PREP
     * 待出菜 READY_TO_SERVE
     * 已出菜 SENT_OUT
     * 已上菜 DELIVERED
     * 已超时 EXPIRED
     * 加急   URGENT
     */
    private String subStatus;
    //限时折扣部分
    private LimitRateDTO limitRate;

    private Long orderId;
    /**
     * 店铺Id
     */
    private Long shopId;

    private Long userId;

    private Long staffId;
    /**
     * 用餐人数
     */
    private Integer seatNum;

    /**
     * 打包费
     */
    private BigDecimal packFee;
    /**
     * 订单原金额（包含打包费+餐位费） 不含折扣价格
     */
    private BigDecimal originAmount;
    private BigDecimal orderAmount;

    /**
     * 台桌Id
     */
    @NotBlank(message = "台桌码不能为空")
    private String tableCode;
    /**
     * 订单类型-
     * cash收银(除小程序以外 都属于收银)
     * miniapp小程序
     */
    private String orderType;

    /**
     * 平台类型
     * PC 收银机客户端
     * WX 微信小程序
     * ALI 支付宝小程序
     * WEB PC管理端
     * APP APP管理端
     */
    private String platformType;
    /**
     * 支付模式:
     * 后付费 after-pay
     * 先付费 before-pay
     * 无桌码 no-table
     */
    private String payMode;

    /**
     * 用餐模式 堂食 dine-in  外带 take-out 外卖 take-away
     */
    @NotBlank(message = "用餐模式不能为空")
    private String dineMode;

    /**
     * 备注
     */
    private String remark;

    /**
     * 当前订单下单次数
     */
    private Integer placeNum;
    /**
     * 挂账人
     */
    private Long creditBuyerId;

    /**
     * 是否等叫 0 否 1 等叫
     */
    private boolean waitCall;
    /**
     * 是否使用会员价
     */
    private boolean vipPrice;

    public Integer getSeatNum() {
        return seatNum == null ? 0 : seatNum;
    }

    public String getDineMode() {
        return StrUtil.isBlank(dineMode) ? "dine-in" : dineMode;
    }

    public Integer getPlaceNum() {
        if (placeNum == null || placeNum == 0) {
            return 1;
        }
        return placeNum;
    }

    public BigDecimal getPackFee() {
        return packFee == null ? BigDecimal.ZERO : packFee;
    }
}
