#!/usr/bin/env python3
# Holt Strahlung + Temperatur (taeglich) fuer den Trafo-Standort von Open-Meteo und
# schreibt/aktualisiert eeg_wetter_cache.csv (Strahlung) + eeg_wetter_temp_cache.csv (Temperatur).
# Historie via Archiv + heutiger/naechster Tag via Forecast (past_days). Auf dem SERVER laufen lassen.
# Ersetzt hole_temperatur.py (jetzt beides in einem).  Aufruf:  python3 hole_wetter.py
import urllib.request, json, csv
from datetime import date, timedelta

LAT, LON = 47.98829859775915, 14.741860126412412
DAILY = "shortwave_radiation_sum,temperature_2m_mean,temperature_2m_min,temperature_2m_max"

# Startdatum aus der Netto-Datei (Fallback fest)
START="2023-02-01"
try:
    with open("eeg_15min_netto.csv",encoding="utf-8") as f:
        next(f); START=next(f).split(",",1)[0][:10]
except Exception: pass

def get(url):
    with urllib.request.urlopen(url,timeout=90) as r: return json.load(r)["daily"]

today=date.today(); arch_end=today-timedelta(days=6)
rows={}
def add(d):
    for i,dt in enumerate(d["time"]):
        rows[dt]=(d["shortwave_radiation_sum"][i],d["temperature_2m_mean"][i],
                  d["temperature_2m_min"][i],d["temperature_2m_max"][i])

# Historie (Archiv, ~2-5 Tage Verzug)
add(get(f"https://archive-api.open-meteo.com/v1/archive?latitude={LAT}&longitude={LON}"
        f"&start_date={START}&end_date={arch_end}&daily={DAILY}&timezone=Europe%2FVienna"))
# Aktuell + heute + morgen (Forecast, ueberschreibt Ueberlappung)
add(get(f"https://api.open-meteo.com/v1/forecast?latitude={LAT}&longitude={LON}"
        f"&daily={DAILY}&past_days=10&forecast_days=2&timezone=Europe%2FVienna"))

ds=sorted(rows)
with open("eeg_wetter_cache.csv","w",newline="",encoding="utf-8") as f:
    w=csv.writer(f); w.writerow(["datum","strahlung_mj_m2"])
    for d in ds:
        if rows[d][0] is not None: w.writerow([d,rows[d][0]])
with open("eeg_wetter_temp_cache.csv","w",newline="",encoding="utf-8") as f:
    w=csv.writer(f); w.writerow(["datum","temp_mean_c","temp_min_c","temp_max_c"])
    for d in ds:
        me,mn,mx=rows[d][1],rows[d][2],rows[d][3]
        if me is not None: w.writerow([d,me,mn,mx])
print(f"Wetter aktualisiert: {len(ds)} Tage {ds[0]} .. {ds[-1]} (inkl. heute/Forecast)")
