"""Generate the .ics attachment (METHOD:REQUEST) for the first-choice slot (§9.1). The .ics is a convenience so Gmail offers "Add to calendar" — the owner can move and rearrange the event before saving. Gogo never writes to the owner's calendar. """ from __future__ import annotations from datetime import datetime from icalendar import Calendar, Event, vCalAddress, vText from gogo.config import get_settings def build_ics( *, uid: str, start: datetime, end: datetime, summary: str, description: str, organizer_email: str = "noreply@gogotelefon.ba", ) -> bytes: cal = Calendar() cal.add("prodid", "-//Gogo Telefon//gogotelefon.ba//BS") cal.add("version", "2.0") cal.add("method", "REQUEST") ev = Event() ev.add("uid", f"{uid}@gogotelefon.ba") ev.add("dtstart", start) ev.add("dtend", end) ev.add("summary", summary) ev.add("description", description) ev.add("status", "TENTATIVE") organizer = vCalAddress(f"MAILTO:{organizer_email}") organizer.params["cn"] = vText("Gogo Telefon") ev["organizer"] = organizer ev.add("url", get_settings().base_url) cal.add_component(ev) return cal.to_ical()