package com.qqchen.deploy.backend.deploy.service;

import com.qqchen.deploy.backend.deploy.dto.ServerMonitorDataDTO;
import com.qqchen.deploy.backend.deploy.dto.ServerMonitorNotificationConfig;
import com.qqchen.deploy.backend.deploy.entity.ServerAlertRule;

import java.util.List;

/**
 * 服务器告警服务接口
 */
public interface IServerAlertService {

    /**
     * 检查监控数据是否触发告警（会自动查询规则）
     * 
     * @param serverId 服务器ID
     * @param monitorData 监控数据
     * @param config 通知配置（可选，为null则不发送通知）
     */
    void checkAlertRules(Long serverId, ServerMonitorDataDTO monitorData, 
                        ServerMonitorNotificationConfig config);
    
    /**
     * 检查监控数据是否触发告警（传入已查询的规则，避免重复查询）
     * 
     * @param serverId 服务器ID
     * @param monitorData 监控数据
     * @param allRules 所有告警规则（提前查询好的）
     * @param config 通知配置（可选，为null则不发送通知）
     */
    void checkAlertRules(Long serverId, ServerMonitorDataDTO monitorData, 
                        List<ServerAlertRule> allRules,
                        ServerMonitorNotificationConfig config);

    /**
     * 检查服务器状态告警（连接失败场景）
     * 
     * @param serverId 服务器ID
     * @param failureCount 连续失败次数
     * @param allRules 所有告警规则
     * @param config 通知配置
     */
    void checkServerStatusAlert(Long serverId, int failureCount, 
                                List<ServerAlertRule> allRules,
                                ServerMonitorNotificationConfig config);

    /**
     * 解除服务器状态告警（连接恢复场景）
     * 
     * @param serverId 服务器ID
     */
    void resolveServerStatusAlert(Long serverId);
}
