package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.StoreBookingTable;
import shop.alien.entity.store.vo.StoreBookingTableVo;

import java.util.List;

/**
 * 预订服务桌号表 服务类
 *
 * @author system
 * @since 2025-01-XX
 */
public interface StoreBookingTableService extends IService<StoreBookingTable> {

    /**
     * 查询预订服务桌号列表
     *
     * @param storeId   门店ID
     * @param categoryId 分类ID（可选，null表示查询全部）
     * @return List<StoreBookingTable>
     */
    List<StoreBookingTable> getTableList(Integer storeId, Integer categoryId);

    /**
     * 查询预订服务桌号列表（包含分类名称）
     *
     * @param storeId   门店ID
     * @param categoryId 分类ID（可选，null表示查询全部）
     * @return List<StoreBookingTableVo>
     */
    List<StoreBookingTableVo> getTableListWithCategoryName(Integer storeId, Integer categoryId);

    /**
     * 分页查询预订服务桌号列表（包含分类名称）
     *
     * @param pageNum   页数
     * @param pageSize  页容
     * @param storeId   门店ID
     * @param categoryId 分类ID（可选，null表示查询全部）
     * @return IPage<StoreBookingTableVo>
     */
    IPage<StoreBookingTableVo> getTableListPage(Integer pageNum, Integer pageSize, Integer storeId, Integer categoryId);

    /**
     * 新增预订服务桌号
     *
     * @param table 桌号对象
     * @return boolean
     */
    boolean addTable(StoreBookingTable table);

    /**
     * 批量新增预订服务桌号
     *
     * @param storeId   门店ID
     * @param categoryId 分类ID
     * @param tables    桌号列表（每个包含桌号和座位数）
     * @return boolean
     */
    boolean batchAddTables(Integer storeId, Integer categoryId, List<StoreBookingTable> tables);

    /**
     * 更新预订服务桌号
     *
     * @param table 桌号对象
     * @return boolean
     */
    boolean updateTable(StoreBookingTable table);

    /**
     * 删除预订服务桌号
     *
     * @param id 桌号ID
     * @return boolean
     */
    boolean deleteTable(Integer id);

    /**
     * 查询桌号下是否有预订信息
     *
     * @param tableId 桌号ID
     * @param storeId 门店ID
     * @return true-有预订信息, false-没有预订信息
     */
    boolean hasReservationInTable(Integer tableId, Integer storeId);
}
