package com.zksy.WaterSupply.MonitorAlarm.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zksy.WaterSupply.MonitorAlarm.dto.in.AlarmAuditInDTO;
import com.zksy.WaterSupply.MonitorAlarm.dto.in.AlarmDispatchInDTO;
import com.zksy.WaterSupply.MonitorAlarm.dto.out.AlarmAuditOutDTO;
import com.zksy.WaterSupply.MonitorAlarm.dto.out.AlarmFlowOutDTO;
import com.zksy.WaterSupply.MonitorAlarm.dto.out.AlarmMapPointOutDTO;
import com.zksy.WaterSupply.MonitorAlarm.dto.out.AlarmStatsOutDTO;
import com.zksy.WaterSupply.MonitorAlarm.dto.out.WaterAlarmOutDTO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 供水监测报警业务接口
 */
public interface IWaterSupplyAlarmService {

    /**
     * 监测报警统计（实时报警数、今日报警总数、设备异常率、平均响应时间）
     */
    AlarmStatsOutDTO getAlarmStats();

    /**
     * 实时异常报警列表（未处理报警，信息卡片展示）
     */
    List<WaterAlarmOutDTO> getRealtimeAlarmList();

    /**
     * 历史异常报警分页查询
     */
    Page<WaterAlarmOutDTO> getHistoryAlarmPage(long pageNum, long pageSize,
                                               String deviceCode, String warningType,
                                               Integer alarmLevel, Integer alarmStatus,
                                               LocalDateTime startTime, LocalDateTime endTime,
                                               String keyword);

    /**
     * 报警详情（报警数据 + 设备数据 + 关联工单）
     */
    WaterAlarmOutDTO getAlarmDetail(String alarmId);

    /**
     * 一键标记已处理
     */
    boolean resolveAlarm(String alarmId, String handleRemark);

    /**
     * 将报警派发为运维工单
     */
    boolean dispatchToWorkOrder(AlarmDispatchInDTO inDTO);

    /**
     * 报警审核/解除（意见 + 附件）
     */
    AlarmAuditOutDTO auditAlarm(AlarmAuditInDTO inDTO);

    /**
     * 查询报警审核记录列表
     */
    List<AlarmAuditOutDTO> getAuditList(String alarmId);

    /**
     * 报警处置全流程跟踪（报警 + 审核记录 + 工单 + 工单日志）
     */
    AlarmFlowOutDTO getAlarmFlow(String alarmId);

    /**
     * 监测报警一张图点位（未处理报警，含经纬度与报警级别）
     */
    List<AlarmMapPointOutDTO> getAlarmMapPoints();
}
