package com.tashow.cloud.productapi.api.product.dto;

import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO;
import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.TimeBookVO;
import com.tashow.cloud.productapi.general.StringListTypeHandler;
import lombok.*;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.util.List;

/**
 * 商品预约配置 DO
 *
 * @author 芋道源码
 */
@TableName("tz_prod_reservation_config")
@KeySequence("tz_prod_reservation_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProdReservationConfigDO extends BaseDO {

    /**
     * 预约配置的唯一标识符
     */
    @TableId
    private Long id;
    /**
     * 关联的商品ID
     */
    private Long prodId;
    /**
     * 预约时段设置
     */
    @TableField(typeHandler = StringListTypeHandler.class)
    private List<String> reservationTimeSlots;
    /**
     * 需提前多少小时预约
     */
    private Integer advanceHours;
    /**
     * 预约日期范围 7天 10天 15天 30天
     */
    private Integer reservationDateRange;
    /**
     * 是否允许更改预约时间 1可以 0不可以
     */
    private Integer allowChange;

    /**
     * 时间段
     */
    private Integer timeSlot;

    /**
     * 更改预约时间的时间规则（如服务开始前1小时可更改）
     */
    private Integer changeTimeRule;
    /**
     * 允许更改预约时间的最大次数
     */
    private Integer maxChangeTimes;
    /**
     * 预约时间区间设置
     */
    @TableField(exist=false)
    private TimeBookVO timeBook;

    public TimeBookVO getTimeBook() {
        if (this.timeBook == null) {
            this.timeBook = new TimeBookVO();
            this.timeBook.setTimeSlot(this.timeSlot);
            this.timeBook.setReservationTimeSlots(this.reservationTimeSlots);
        }
        return this.timeBook;
    }

    public void setTimeBook(TimeBookVO timeBook) {
        this.timeBook = timeBook;
    }
}