# services/calendar.py
from __future__ import annotations
from datetime import datetime, timedelta, timezone
from urllib.parse import urlencode

from config import WebinarEvent


MSK = timezone(timedelta(hours=3))
YEKB = timezone(timedelta(hours=5))

_MONTHS_RU = {
    1: "января", 2: "февраля", 3: "марта", 4: "апреля",
    5: "мая", 6: "июня", 7: "июля", 8: "августа",
    9: "сентября", 10: "октября", 11: "ноября", 12: "декабря",
}


def google_calendar_url(event: WebinarEvent) -> str:
    """Build a Google Calendar deep-link that pre-fills the event."""
    start_utc = event.datetime.astimezone(timezone.utc)
    end_utc = start_utc + timedelta(minutes=event.duration_minutes)
    params = {
        "action": "TEMPLATE",
        "text": event.title,
        "dates": (
            f"{start_utc.strftime('%Y%m%dT%H%M%SZ')}/"
            f"{end_utc.strftime('%Y%m%dT%H%M%SZ')}"
        ),
        "details": event.description,
    }
    return "https://calendar.google.com/calendar/render?" + urlencode(params)


def format_event_time(event: WebinarEvent, *, include_utc: bool = False) -> str:
    """Human-readable event time, e.g. '15 июня, 19:00 МСК / 21:00 Екб' (+ ' / 16:00 UTC' when requested)."""
    msk = event.datetime.astimezone(MSK)
    yekb = event.datetime.astimezone(YEKB)
    parts = [
        f"{msk.day} {_MONTHS_RU[msk.month]}",
        f"{msk.strftime('%H:%M')} МСК",
        f"{yekb.strftime('%H:%M')} Екб",
    ]
    if include_utc:
        utc = event.datetime.astimezone(timezone.utc)
        parts.append(f"{utc.strftime('%H:%M')} UTC")
    return f"{parts[0]}, " + " / ".join(parts[1:])
