package com.ruoyi.ss.room.service;

import java.util.List;

import com.ruoyi.ss.equipment.domain.EquipmentVO;
import com.ruoyi.ss.room.domain.*;
import com.ruoyi.ss.toilet.domain.ToiletVO;

/**
 * 房间Service接口 店长
 *
 * @author qzz
 * @date 2024-11-20
 */
public interface IRoomService
{
    /**
     * 查询房间
     *
     * @param roomId 房间主键
     * @return 房间
     */
    public RoomVO selectERoomByRoomId(Long roomId);
//
//    /**
//     * 查询房间(不带拼接)
//     *
//     * @param roomId 房间主键
//     * @return 房间
//     */
//    public RoomVO selectSimpleRoomByRoomId(Long roomId);

    /**
     * 查询房间列表
     *
     * @param eRoom 房间
     * @return 房间集合
     */
    public List<RoomVO> selectERoomList(RoomQuery eRoom);

    /**
     * 查询房间ids
     *
     * @param query 条件
     * @return 房间集合
     */
    List<Long> selectRoomIdsList(RoomQuery query);

    /**
     * 根据店铺id查询房间列表
     *
     * @param storeId 店铺id
     * @return 房间集合
     */
    public List<RoomVO> selectERoomListByStoreId(Long storeId);

    /**
     * 新增房间
     *
     * @param eRoom 房间
     * @return 结果
     */
    public int insertERoom(Room eRoom);

    /**
     * 修改房间
     *
     * @param eRoom 房间
     * @return 结果
     */
    public int updateERoom(Room eRoom);

    /**
     * 修改店铺名
     */
    int updateStoreName(Long storeId, String storeName);

    /**
     * 批量删除房间
     *
     * @param roomIds 需要删除的房间主键集合
     * @return 结果
     */
    public int deleteERoomByRoomIds(Long[] roomIds);

    /**
     * 删除房间信息
     *
     * @param roomId 房间主键
     * @return 结果
     */
    public int deleteERoomByRoomId(Long roomId);

    /**
     * 开房间门
     * @param equipmentVO 设施对象
     * @param open 开还是关
     * @return String
     */
    boolean openRoomDoor(EquipmentVO equipmentVO,boolean open, String reason, boolean returnMac);


    /**
     * 根据店铺查房间
     * @param storeId 店铺id
     * @return String
     */
    List<RoomVO> getRoomListByStoreId(Long storeId);

    /**
     * 获取标签列表
     * @param storeId 店铺id
     * @return String
     */
    List<TagsVO> getTagListByStoreId(Long storeId);

//    /**
//     * 下架设备
//     * @param deviceId 设备id
//     * @return String
//     */
//    public int offlineDevice(Long deviceId);

    /**
     * 绑定房间门
     * @param eRoom 房间对象
     * @return String
     */
    int bandDoor(RoomDTO eRoom);

    /**
     * 新建大厅设备（房间级别） 转换
     */
    int addLobbyDevice(Room room);

    /**
     * 应用套餐
     */
    int bandRule(BandRuleDTO dto);

    /**
     * 批量应用套餐
     */
    int bandRules(BandRulesDTO dto);


    /**
     * 解除套餐
     */
    int unBandRule(Long ruleId,Long roomId);

    /**
     * 通过房间id查询所有设备id（除房间门外）
     */
    List<Long> selectAllDeviceIdsByRoomId(Long roomId);

    /**
     * 通过房间id查询所有设施id
     */
    List<Long> selectAllEquipmentIdsByRoomId(Long roomId);

    /**
     * 通过店铺id查询所有设施id
     */
    List<Long> selectAllHallEquIdsByStoreId(Long storeId);

    /**
     * 获取空闲房间数
     */
    int selectIdleRoomNum(Long storeId);

    /**
     * 获取卫生间数
     */
    int selectToiletNum(Long storeId);

    /**
     * 套餐是否被应用(返回房间名)
     */
    List<RoomVO> selectIsExistRule(Long ruleId);

    /**
     * 配置房间wifi
     */
    int setWifi(SetWifiDTO dto);

    /**
     * 获取wifi对象列表
     */
    List<WifiObjVO> selectWifiObjList();


    /**
     * 获取房间数
     */
    int getCount(RoomQuery query);

    /**
     * code交换id
     */
    Long getId(String roomCode);

    /**
     * 根据房间ids获取房间列表
     */
    List<RoomVO> selectERoomByRoomIds(List<Long> ids);
}
