package com.ruoyi.business.service.impl;

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

import com.ruoyi.business.domain.HwAlarmType;
import com.ruoyi.business.domain.VO.AlarmTypeVo;
import com.ruoyi.business.mapper.HwAlarmTypeMapper;
import com.ruoyi.common.core.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.mapper.HwAlarmInfoMapper;
import com.ruoyi.business.domain.HwAlarmInfo;
import com.ruoyi.business.service.IHwAlarmInfoService;

/**
 * 报警信息Service业务层处理
 *
 * @author xins
 * @date 2023-09-15
 */
@Service
public class HwAlarmInfoServiceImpl implements IHwAlarmInfoService {
    @Autowired
    private HwAlarmInfoMapper hwAlarmInfoMapper;

    @Autowired
    private HwAlarmTypeMapper hwAlarmTypeMapper;

    /**
     * 查询报警信息
     *
     * @param alarmInfoId 报警信息主键
     * @return 报警信息
     */
    @Override
    public HwAlarmInfo selectHwAlarmInfoByAlarmInfoId(Long alarmInfoId) {
        return hwAlarmInfoMapper.selectHwAlarmInfoByAlarmInfoId(alarmInfoId);
    }

    /**
     * 查询报警信息列表
     *
     * @param hwAlarmInfo 报警信息
     * @return 报警信息
     */
    @Override
    public List<HwAlarmInfo> selectHwAlarmInfoList(HwAlarmInfo hwAlarmInfo) {
        return hwAlarmInfoMapper.selectHwAlarmInfoList(hwAlarmInfo);
    }

    /**
     * 新增报警信息
     *
     * @param hwAlarmInfo 报警信息
     * @return 结果
     */
    @Override
    public int insertHwAlarmInfo(HwAlarmInfo hwAlarmInfo) {
        hwAlarmInfo.setCreateTime(DateUtils.getNowDate());
        return hwAlarmInfoMapper.insertHwAlarmInfo(hwAlarmInfo);
    }

    /**
     * 修改报警信息
     *
     * @param hwAlarmInfo 报警信息
     * @return 结果
     */
    @Override
    public int updateHwAlarmInfo(HwAlarmInfo hwAlarmInfo) {
        hwAlarmInfo.setUpdateTime(DateUtils.getNowDate());
        return hwAlarmInfoMapper.updateHwAlarmInfo(hwAlarmInfo);
    }

    /**
     * 批量删除报警信息
     *
     * @param alarmInfoIds 需要删除的报警信息主键
     * @return 结果
     */
    @Override
    public int deleteHwAlarmInfoByAlarmInfoIds(Long[] alarmInfoIds) {
        return hwAlarmInfoMapper.deleteHwAlarmInfoByAlarmInfoIds(alarmInfoIds);
    }

    /**
     * 删除报警信息信息
     *
     * @param alarmInfoId 报警信息主键
     * @return 结果
     */
    @Override
    public int deleteHwAlarmInfoByAlarmInfoId(Long alarmInfoId) {
        return hwAlarmInfoMapper.deleteHwAlarmInfoByAlarmInfoId(alarmInfoId);
    }


    /**
     * @return List<AlarmTypeVo>
     * @param: sceneId
     * @description 根据报警类型获取报警数量
     * @author xins
     * @date 2023-09-15 13:20
     */
    @Override
    public List<AlarmTypeVo> selectAlarmsByAlarmType(Long sceneId) {
        List<AlarmTypeVo> list = hwAlarmInfoMapper.selectAlarmsByAlarmType(sceneId);
        HwAlarmType queryAlarmType = new HwAlarmType();
        queryAlarmType.setSceneId(sceneId);
        List<HwAlarmType> alarmTypes = hwAlarmTypeMapper.selectHwAlarmTypeList(queryAlarmType);
        Map<Long, HwAlarmType> alarmTypeMap = alarmTypes.stream()
                .collect(Collectors.toMap(HwAlarmType::getAlarmTypeId, alarmType -> alarmType));
        list.stream().forEach(alarmType -> {
            alarmType.setAlarmTypeName(alarmTypeMap.get(alarmType.getAlarmTypeId()) == null ? ""
                    : alarmTypeMap.get(alarmType.getAlarmTypeId()).getAlarmTypeName());
            alarmTypeMap.remove(alarmType.getAlarmTypeId());
        });


        Set<Long> alarmTypeIds = alarmTypeMap.keySet();
        for (Long alarmTypeId : alarmTypeIds) {
            HwAlarmType alarmType = alarmTypeMap.get(alarmTypeId);
            AlarmTypeVo alarmTypeVo = new AlarmTypeVo();
            alarmTypeVo.setAlarmTypeId(alarmType.getAlarmTypeId());
            alarmTypeVo.setAlarmTypeName(alarmType.getAlarmTypeName());
            alarmTypeVo.setAlarmCount(0);
            list.add(alarmTypeVo);
        }

        return list;

    }
}
