# grafiek_week.py - de temperatuur per uur en de energie per dag, in twee grafieken
import matplotlib.pyplot as plt
from logboek import lees_week, opschonen

rijen = lees_week()
opschonen(rijen)

per_uur = {}                                 # begin van het uur -> temperaturen
per_dag = {}                                 # datum -> [verbruik, zon] in Wh
for r in rijen:
    if r["T"] is not None:
        uur = r["tijd"].replace(minute=0)
        if uur not in per_uur:
            per_uur[uur] = []
        per_uur[uur].append(r["T"])
    dag = r["tijd"].date()
    if dag not in per_dag:
        per_dag[dag] = [0.0, 0.0]
    per_dag[dag][0] += r["verbruik"]
    per_dag[dag][1] += r["zon"]

uren = sorted(per_uur)
gemiddeld = [sum(per_uur[u]) / len(per_uur[u]) for u in uren]
dagen = sorted(per_dag)

figuur, (boven, onder) = plt.subplots(2, 1, figsize=(9, 7))
boven.plot(uren, gemiddeld, color="tab:red")
boven.set_ylabel("temperatuur (°C)")
boven.set_title("Klimaatmodule, 12 tot 18 oktober 2026")
boven.grid(True)
x = range(len(dagen))
onder.bar([i - 0.2 for i in x], [per_dag[d][0] / 1000 for d in dagen], width=0.4, label="verbruik")
onder.bar([i + 0.2 for i in x], [per_dag[d][1] / 1000 for d in dagen], width=0.4, label="zonnestroom")
onder.set_xticks(list(x), [d.strftime("%a %d") for d in dagen])
onder.set_ylabel("energie per dag (kWh)")
onder.legend()
figuur.tight_layout()
figuur.savefig("week_oktober.png", dpi=150)
plt.show()
