package com.weather.modules.sys.alert;

import com.weather.modules.sys.service.SysAlertService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Collections;
import java.util.List;

/**
 * 通知数据源收集器。
 * 自动发现所有 AlertSource 实现，轮询并发布通知。
 */
@Slf4j
@Component
public class AlertSourceCollector {

    @Autowired(required = false)
    private List<AlertSource> sources = Collections.emptyList();

    /**
     * 轮询所有数据源，通过 SysAlertService 发布去重后的通知。
     *
     * @param alertService 通知服务
     * @return 本次新发布的通知总数
     */
    public int collectAll(SysAlertService alertService) {
        if (sources.isEmpty()) {
            return 0;
        }
        int total = 0;
        for (AlertSource source : sources) {
            try {
                List<AlertSource.AlertMessage> alerts = source.check();
                if (alerts == null || alerts.isEmpty()) {
                    continue;
                }
                for (AlertSource.AlertMessage a : alerts) {
                    boolean isNew = alertService.publishIfNotExists(
                            a.level(), a.title(), a.content(),
                            "datasource",
                            source.getName() + ":" + a.sourceId()
                    );
                    if (isNew) total++;
                }
            } catch (Exception e) {
                log.error("数据源 [{}] 检查失败", source.getName(), e);
            }
        }
        if (total > 0) {
            log.info("从 {} 个数据源收集到 {} 条新通知", sources.size(), total);
        }
        return total;
    }
}
