package com.weather.modules.sys.alert;

import java.util.List;

/**
 * 通知数据源接口。
 * 任何需要自动产生通知的模块，实现此接口并注册为 Spring Bean，
 * AlertSourceCollector 会定时轮询所有实现并收集通知。
 *
 * <p>示例：
 * <pre>{@code
 * @Component
 * public class RainWarningSource implements AlertSource {
 *     public String getName() { return "rain-warning"; }
 *     public List<AlertMessage> check() {
 *         // 查询数据，发现异常则返回 AlertMessage 列表
 *     }
 * }
 * }</pre>
 */
public interface AlertSource {

    /**
     * 数据源唯一标识，用于日志和 source_id 去重
     */
    String getName();

    /**
     * 检查该数据源，返回本次发现的通知。
     * 返回空列表或 null 表示无新通知。
     * 返回的通知会通过 (sourceType=datasource, sourceId=getName():message.sourceId) 去重。
     */
    List<AlertMessage> check();

    /**
     * 数据源产生的单条通知
     */
    record AlertMessage(String level, String title, String content, String sourceId) {
        public AlertMessage {
            if (level == null) level = "info";
            if (title == null) title = "";
            if (content == null) content = "";
            if (sourceId == null) sourceId = "";
        }
    }
}
