package com.czg.account.entity;

import com.czg.enums.ShopTableStatusEnum;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

import java.io.Serial;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 台桌配置 实体类。
 *
 * @author zs
 * @since 2025-02-13
 */
@Data

@NoArgsConstructor
@AllArgsConstructor
@Table("tb_shop_table")
public class ShopTable implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 自增id
     */
    @Id(keyType = KeyType.Auto)
    private Integer id;

    private String name;

    private Long shopId;

    /**
     * 客座数,允许的客座数量
     */
    private Integer maxCapacity;

    /**
     * 台桌排序
     */
    private Integer sort;

    /**
     * 区域Id
     */
    private Integer areaId;

    /**
     * 是否接受网络预定
     */
    private Integer isPredate;

    /**
     * 网络预定台桌支付金额
     */
    private BigDecimal predateAmount;

    /**
     * idle-空闲 using-使用中 subscribe预定，closed--关台， opening 开台中，cleaning 台桌清理中
     */
    private String status;

    @Column(onInsertValue = "now()")
    private LocalDateTime createTime;

    @Column(onInsertValue = "now()", onUpdateValue = "now()")
    private LocalDateTime updateTime;

    /**
     * 二维码
     */
    private String tableCode;

    /**
     * 自动清台 0手动 1自动
     */
    private Integer autoClear;

    /**
     * 使用时间
     */
    private LocalDateTime useTime;

    /**
     * 结束时间
     */
    private LocalDateTime endTime;

    /**
     * 已点商品数量
     */
    private Integer productNum;

    /**
     * 总金额
     */
    private BigDecimal totalAmount;

    /**
     * 应付金额
     */
    private BigDecimal realAmount;

    /**
     * 用餐人数
     */
    private Integer useNum;

    public boolean canUseByStatus() {
        return !ShopTableStatusEnum.CLOSED.equalsVal(status) && !ShopTableStatusEnum.CLEANING.equalsVal(status) && !ShopTableStatusEnum.SUBSCRIBE.equalsVal(status);
    }

}
