# tests/test_calendar.py
from datetime import datetime, timezone, timedelta

from config import WebinarEvent
from services.calendar import google_calendar_url, format_event_time


MSK = timezone(timedelta(hours=3))


def _webinar(title="W", description="D", minutes=60, year=2026, month=6, day=15, hour=19):
    return WebinarEvent(
        event_id="w-1",
        type="webinar",
        title=title,
        description=description,
        datetime=datetime(year, month, day, hour, 0, tzinfo=MSK),
        duration_minutes=minutes,
    )


def test_google_calendar_url_uses_utc_dates():
    url = google_calendar_url(_webinar())
    assert "dates=20260615T160000Z%2F20260615T170000Z" in url


def test_google_calendar_url_includes_title():
    url = google_calendar_url(_webinar(title="Маркетинг 2026"))
    assert "text=%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%82%D0%B8%D0%BD%D0%B3+2026" in url


def test_google_calendar_url_includes_description():
    url = google_calendar_url(_webinar(description="Привет мир"))
    assert "details=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82+%D0%BC%D0%B8%D1%80" in url


def test_google_calendar_url_action_template():
    url = google_calendar_url(_webinar())
    assert url.startswith("https://calendar.google.com/calendar/render?")
    assert "action=TEMPLATE" in url


def test_format_event_time_msk_and_yekb():
    s = format_event_time(_webinar())
    # 19:00 MSK == 21:00 Yekaterinburg (UTC+5)
    assert "19:00 МСК" in s
    assert "21:00 Екб" in s


def test_format_event_time_includes_utc_when_requested():
    s = format_event_time(_webinar(), include_utc=True)
    assert "16:00 UTC" in s


def test_format_event_time_no_utc_by_default():
    s = format_event_time(_webinar())
    assert "UTC" not in s


def test_format_event_time_renders_russian_month():
    s = format_event_time(_webinar(month=6, day=15))
    assert "15 июня" in s
