package com.czg.account.service;

import com.czg.account.dto.BkOrderDTO;
import com.czg.account.entity.BkOrderTable;
import com.czg.account.vo.BkTableVO;
import com.czg.account.vo.BookingOrderStatisticsVO;
import com.mybatisflex.core.service.IService;
import com.czg.account.entity.BkOrder;

import java.time.LocalDate;
import java.util.List;

/**
 * 预约单 服务层。
 *
 * @author ww
 * @since 2025-11-27
 */
public interface BkOrderService extends IService<BkOrder> {

    /**
     * 查询预约单统计信息
     */
     BookingOrderStatisticsVO bookingOrderStatistics(Long shopId, String search, LocalDate start, LocalDate end, String status);

    /**
     * 查询预约单列表
     * @param shopId 店铺id
     * @param search 搜索关键词  客户姓名/客户手机号
     * @param start 开始日期
     * @param end 结束日期
     * @param status 预约单状态
     * @return 预约单列表
     */
    List<BkOrder> bookings(Long shopId, String search, LocalDate start, LocalDate end, String status);

     /**
     * 查询预约单的台桌列表
     * @param shopId 店铺id
     * @param bkOrderId 预约单id
     * @return 预约单的台桌列表
     */
    List<BkOrderTable> bookingTables(Long shopId, Long bkOrderId);

    /**
     * 预约
     */
    void booking(Long shopId, BkOrderDTO bkOrder);
    /**
     * 更新预约状态
     * @param shopId 店铺id
     * @param status 预约单状态  已取消/已到店
     * @param bkOrderId     预约单id
     * @param cancelReason     取消原因
     */
    void upStatus(Long shopId, String status, Long bkOrderId,String cancelReason);

    /**
     * 查询台桌列表
     * @param shopId 店铺id
     * @param areaId 区域id
     * @param day 预约日期
     * @param seatTimeType 预约时间类型
     * @return 台桌列表
     */
    List<BkTableVO> table(Long shopId, Long areaId, LocalDate day, String seatTimeType);

}
