package com.ruoyi.ss.equipment.service;

import com.ruoyi.ss.equipment.domain.Equipment;
import com.ruoyi.ss.equipment.domain.EquipmentQuery;
import com.ruoyi.ss.equipment.domain.EquipmentVO;
import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipment;
import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipmentQueryDTO;

import java.util.List;

/**
 * 设施Service接口
 *
 * @author qzz
 * @date 2024-12-21
 */
public interface IEquipmentService
{
    /**
     * 查询设施
     *
     * @param equipmentId 设施主键
     * @return 设施
     */
    public EquipmentVO selectEquipmentByEquipmentId(Long equipmentId);

    /**
     * 查询设施列表
     *
     * @param equipment 设施
     * @return 设施集合
     */
    public List<EquipmentVO> selectEquipmentList(EquipmentQuery equipment);

    /**
     * 根据房间id查询设施列表
     *
     * @param roomId 房间id
     * @return 设施集合
     */
    public List<EquipmentVO> selectEquipmentListByRoomId(Long roomId);

    /**
     * 新增设施
     *
     * @param equipment 设施
     * @return 结果
     */
    public int insertEquipment(Equipment equipment);

    /**
     * 修改设施
     *
     * @param equipment 设施
     * @return 结果
     */
    public int updateEquipment(Equipment equipment);

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

    /**
     * 根据房间id修改设施
     *
     * @param equipment 设施
     * @return 结果
     */
    public int updateEquipmentByRoomId(Equipment equipment);

    /**
     * 批量删除设施
     *
     * @param equipmentIds 需要删除的设施主键集合
     * @return 结果
     */
    public int deleteEquipmentByEquipmentIds(Long[] equipmentIds);

    /**
     * 根据房间删除设施
     *
     * @param roomIds 需要删除的房间id集合
     * @return 结果
     */
    int deleteEquipmentByRoomId(Long[] roomIds);

    /**
     * 删除设施信息
     *
     * @param equipmentId 设施主键
     * @return 结果
     */
    public int deleteEquipmentByEquipmentId(Long equipmentId);

    /**
     * 设备投放的房间id
     * @param deviceId 设备id
     * @return String
     */
    List<Long> selectRoomIdByDeviceId(Long deviceId);

    /**
     * 通过房间id查询所有设备id（除房间门外）
     * @param roomId 房间id0
     * @return String
     */
    List<Long> selectDeviceIdListByRoomId(Long roomId);

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

    /**
     * 通过店铺id查询所有大厅设施id
     * @param storeId 店铺id
     * @return String
     */
    List<Long> selectAllHallEquIdsByStoreId(Long storeId);

    /**
     * 是否已经绑定了大门
     * @param storeId 店铺id
     * @return String
     */
    boolean uniqueGate(Long storeId);


//    /**
//     * 根据店铺查询大门
//     * @param storeId 店铺id
//     * @return String
//     */
//    EquipmentVO selectGate(Long storeId);

    /**
     * 根据设备id查询店铺
     * @param deviceId 设备id
     * @return String
     */
    Long selectStoreIdByDeviceId(Long deviceId);

    /**
     * 根据设备id查询设施对象
     * @param deviceId 设备id
     * @return String
     */
    EquipmentVO selectByDeviceId(Long deviceId);


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

    /**
     * 下架设备（根据设备id）
     * @param deviceId 设备id
     * @return String
     */
    int offlineDeviceByDeviceId(Long deviceId);

    /**
     * 获取空闲设施数量
     * @param storeId 店铺id
     * @return String
     */
    int selectIdleEquipmentNumByStoreId(Long storeId);

    /**
     * 获取房间门
     * @param roomId 房间id
     * @param type 设施类型
     * @return String
     */
    EquipmentVO selectDoorByRoomId(Long roomId,String type);

    /**
     * 统一查询设施列表
     * @param query 查询条件
     * @return String
     */
    List<UnifiedEquipment> selectUnifiedEquipmentList(UnifiedEquipmentQueryDTO query);

//    /**
//     * 套餐是否被应用(返回设施名)
//     */
//    List<String> selectIsExistRule(Long ruleId);
}
