package com.ruoyi.business.service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.ruoyi.business.domain.HwMonitorUnit;
import com.ruoyi.business.domain.VO.*;
import com.ruoyi.common.core.domain.R;


/**
 * 监控单元Service接口
 *
 * @author YINQ
 * @date 2023-08-31
 */
public interface IHwMonitorUnitService
{
    /**
     * 查询监控单元
     *
     * @param monitorUnitId 监控单元主键
     * @return 监控单元
     */
    public HwMonitorUnit selectHwMonitorUnitByMonitorUnitId(Long monitorUnitId);
    /**
     * 查询区域数量站场景区总数百分比
     * */
    public List<HwMonitorUnitVo> selectMonitorPercentage();
    /**
     * 	展示总的设备数量和总的监控单元数量（最低级的监控单元）
     * */
    public AllNumsVo selectAllNums(Long sceneId);
//    public List<AllNumsVo> selectSenceAllNums();

    /**
     * 分页获取最子集监控单元列表
     * */
    public List<HwMonitorUnit> selectLimitSubMonitorUnit();

    /**
     * 报警信息列表
     * */




    /**
     * 监控单元报警统计
     * */
    public  List<AlarmStatsVo> selectAlarmStats(Long sceneId);
    /**
     * 查询监控单元列表
     *
     * @param hwMonitorUnit 监控单元
     * @return 监控单元集合
     */
    public List<HwMonitorUnit> selectHwMonitorUnitList(HwMonitorUnit hwMonitorUnit);

    /**
     * 获取最子级监控单元数量、设备数量和在线设备数量
     * */
    public SubDeviceSumVo selectSubDeviceSum(Long sceneId);

    /**
     * 树状获取监控单元列表
     * */
    public List<HwMonitorUnit> selectTreeList(List<HwMonitorUnit> hwMonitorUnits);
    /**
     * 获取监控单元详细信息
     * */
    public HwMonitorUnit selectHwmonitorUnitSub(Long monitorUnitId);


    /**
     * 新增监控单元
     *
     * @param hwMonitorUnit 监控单元
     * @return 结果
     */
    public int insertHwMonitorUnit(HwMonitorUnit hwMonitorUnit);

    /**
     * 修改监控单元
     *
     * @param hwMonitorUnit 监控单元
     * @return 结果
     */
    public int updateHwMonitorUnit(HwMonitorUnit hwMonitorUnit);

    /**
     * 批量删除监控单元
     *
     * @param monitorUnitIds 需要删除的监控单元主键集合
     * @return 结果
     */
    public int deleteHwMonitorUnitByMonitorUnitIds(Long[] monitorUnitIds);

    /**
     * 删除监控单元信息
     *
     * @param monitorUnitId 监控单元主键
     * @return 结果
     */
    public int deleteHwMonitorUnitByMonitorUnitId(Long monitorUnitId);


    /**
     * 查询监控单元树结构信息
     *
     * @param hwMonitorUnit 监控单元信息
     * @return 监控单元树信息集合
     */
    public List<TreeSelectVo> selectMonitorTreeList(HwMonitorUnit hwMonitorUnit);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param hwMonitorUnits 监控单元列表
     * @return 下拉树结构列表
     */
    public List<TreeSelectVo> buildMonitorUnitTreeSelect(List<HwMonitorUnit> hwMonitorUnits);

    /**
     * 构建前端所需要树结构
     *
     * @param hwMonitorUnits 监控单元列表
     * @return 树结构列表
     */
    public List<HwMonitorUnit> buildMonitorUnitTree(List<HwMonitorUnit> hwMonitorUnits);
}