package com.ruoyi.ems.service;

import com.ruoyi.ems.domain.Alarm;
import com.ruoyi.ems.domain.AlarmHandle;

import java.util.List;
import java.util.Map;

/**
 * 告警Service接口
 */
public interface IAlarmService {

    /**
     * 根据ID查询告警
     */
    Alarm selectById(Long id);

    /**
     * 根据告警ID查询
     */
    Alarm selectByAlarmId(String alarmId);

    /**
     * 查询告警列表
     */
    List<Alarm> selectList(Alarm alarm);

    /**
     * 查询活动告警列表
     */
    List<Alarm> selectActiveAlarms(String areaCode);

    /**
     * 新增告警
     */
    int insert(Alarm alarm);

    /**
     * 更新告警
     */
    int update(Alarm alarm);

    /**
     * 批量删除告警
     */
    int deleteByIds(Long[] ids);

    /**
     * 查询告警的处置记录
     */
    List<AlarmHandle> selectHandlesByAlarmId(String alarmId);

    // ==================== 统计接口 ====================

    /**
     * 告警统计概览
     */
    Map<String, Object> selectAlarmStats(Alarm query);

    /**
     * 按告警级别统计
     */
    List<Map<String, Object>> countByLevel(Alarm query);

    /**
     * 按告警状态统计
     */
    List<Map<String, Object>> countByStatus(Alarm query);

    /**
     * 按时间趋势统计
     * @param granularity 粒度：day-日（按小时）, month-月（按天）
     */
    List<Map<String, Object>> countByTimeTrend(Alarm query, String granularity);

    /**
     * 按子系统统计
     */
    List<Map<String, Object>> countBySubsystem(Alarm query);

    /**
     * 处理率统计
     */
    Map<String, Object> countHandleRate(Alarm query);
}