package com.ruoyi.ss.room.service;

import com.ruoyi.ss.equipment.domain.EquipmentVO;
import com.ruoyi.ss.order.domain.vo.ReservedTimePeriod;
import com.ruoyi.ss.room.domain.RoomVO;

import java.util.Date;
import java.util.List;

/**
 * 房间信息组装器
 * @author qzz
 * 2024/4/29
 */
public interface IRoomAssembler {

    /**
     * 拼接套餐信息
     * @param list 店铺列表
     */
    void assembleRuleInfo(List<RoomVO> list);

    /**
     * 拼接套餐信息(后端)
     * @param list 店铺列表
     */
    void assembleRuleInfo2(List<RoomVO> list);

    /**
     * 拼接套餐信息(后端)
     * @param list 店铺列表
     */
    void assembleRuleInfo2(RoomVO list);


    /**
     * 拼接设备信息
     * @param list 店铺列表
     */
    void assembleDeviceInfo(List<RoomVO> list);

    /**
     * 拼接已预约时间段
     * @param room 房间对象
     */
    void assembleReservedTimePeriods(RoomVO room);

    /**
     * 拼接已预约时间段
     * @param room 房间对象
     */
    void assembleReservedTimePeriods(EquipmentVO room);

    /**
     * 拼接最低套餐信息
     * @param room 房间对象
     */
    void assembleRule(RoomVO room);

//    /**
//     * 拼接最低套餐信息
//     * @param equipmentVO 设施对象
//     */
//    void assembleRule(EquipmentVO equipmentVO);

    /**
     * 拼接房间下所有套餐信息
     * @param room 房间对象
     */
    void assembleAllRule(RoomVO room);

    /**
     * 根据房间id获取预约时间段
     * @param roomId 房间ID
     * @param startTime 开始时间
     * @return 已预约时间段
     */
    List<ReservedTimePeriod> getReservedTimePeriods(Long roomId, Date startTime);

    /**
     * 拼接房间下所有设施
     * @param roomVO 房间对象
     */
    void assembleEquipmentList(RoomVO roomVO);

    /**
     * 拼接房间下所有设施
     * @param roomVO 房间对象
     */
    void assembleEquipmentList(List<RoomVO> roomVO);

    /**
     * 拼接大厅下所有设施
     * @param rooms 房间对象
     */
//    List<RoomVO> assembleHallEquipmentList(List<RoomVO> rooms,String type);

    /**
     * 拼接房间下所有套餐
     * @param roomVO 房间对象
     */
    void assembleRules(RoomVO roomVO);

    /**
     * 拼接大厅设施中的device
     * @param roomVO 房间对象
     */
    void assembleHallDevice(RoomVO roomVO);

    /**
     * 拼接大厅设施中的device
     * @param roomVO 房间对象
     */
    void assembleHallDevice(List<RoomVO> roomVO);
}
