import requests
from icalendar import Calendar
from datetime import datetime

KALENDER = [
    (
        "Gemeindebus",
        "https://kg-eggenstein-leopoldshafen.krz.tools/?q=public/cr_ical&security=8zWjHoIuwUxjjxcWAMMER0mo0XyuX7y9&id=11",
    ),
    (
        "Neuer Gemeindebus",
        "https://kg-eggenstein-leopoldshafen.krz.tools/?q=public/cr_ical&security=Jr21EybVtv9IBwYuK0AKIA5jo8CmS3Ec&id=36",
    ),
    (
        "Ford Tourneo",
        "https://kg-eggenstein-leopoldshafen.krz.tools/?q=public/cr_ical&security=vVKx5tG6d2G9X68bvTCvWJj2hqfmNd4L&id=38",
    ),
]

OUTPUT = "/home/ralf/ical-fahrzeuge/fahrzeuge.ics"

termine = []

for fahrzeug, url in KALENDER:
    response = requests.get(url, timeout=30)
    response.raise_for_status()

    kalender = Calendar.from_ical(response.content)

    for component in kalender.walk():
        if component.name == "VEVENT":
            summary = component.get("SUMMARY")

            if summary:
                component["SUMMARY"] = f"[{fahrzeug}] {summary}"

            termine.append(component)


def startzeit(termin):
    start = termin.get("DTSTART")

    if start is None:
        return datetime.max

    wert = start.dt

    if hasattr(wert, "hour"):
        return wert.replace(tzinfo=None)

    return datetime.combine(wert, datetime.min.time())


termine.sort(key=startzeit)

gesamt = Calendar()
gesamt.add("prodid", "-//Ralf Fahrzeuge//Fahrzeuge//DE")
gesamt.add("version", "2.0")
gesamt.add("calscale", "GREGORIAN")
gesamt.add("x-wr-calname", "Fahrzeuge")
gesamt.add("x-wr-timezone", "Europe/Berlin")

for termin in termine:
    gesamt.add_component(termin)

with open(OUTPUT, "wb") as datei:
    datei.write(gesamt.to_ical())

print(f"{len(termine)} Termine zusammengeführt.")
print(f"Kalender erstellt: {OUTPUT}")
