Source: js/weather-poller.js

// weather-poller.js — Zentraler Wetterdaten-Poller
import { getLast } from 'bootstrap-api';

let lastSeenStationMs = 0;
//let pollInterval = 30_000; // 30 Sekunden
let pollInterval = 5_000; // 5 Sekunden
let intervalId = null;

async function checkForNewData() {
  try {
    const last = await getLast();
    const ms =
      typeof last?.current?.datatimestamp === 'number' ? last.current.datatimestamp * 1000 : null;

    if (ms && ms !== lastSeenStationMs) {
      lastSeenStationMs = ms;

      // Event feuern mit Timestamp
      window.dispatchEvent(
        new CustomEvent('weather:new-data', {
          detail: { ms, timestamp: ms },
        })
      );
    }
  } catch (err) {
    console.warn('[weather-poller] Polling error:', err);
  }
}

/**
 * Startet den zentralen Weather-Poller
 * @param {number} interval - Polling-Intervall in ms (default: 30000)
 */
export function startWeatherPoller(interval = 30_000) {
  if (intervalId) {
    console.warn('[weather-poller] Already running, stopping old interval');
    stopWeatherPoller();
  }

  pollInterval = interval;

  // Erstes Check sofort (nach kurzem Delay, damit Charts initialisiert sind)
  setTimeout(() => checkForNewData(), 1000);

  // Dann regelmäßig
  intervalId = setInterval(() => {
    checkForNewData();
  }, pollInterval);
}

/**
 * Stoppt den Weather-Poller
 */
export function stopWeatherPoller() {
  if (intervalId) {
    clearInterval(intervalId);
    intervalId = null;
  }
}

/**
 * Liefert den letzten gesehenen Timestamp
 * @deprecated Ungenutzt – Kandidat für Entfernung
 */
export function getLastSeenTimestamp() {
  return lastSeenStationMs;
}