"""Smoke tests for Calendar models."""
from __future__ import annotations

import pytest
from django.utils import timezone

from apps.rims.calendar.models import CalendarEvent, EventAttendee


@pytest.fixture
def admin_user(db):
    from django.contrib.auth import get_user_model
    from apps.core.permissions.roles import UserRole
    User = get_user_model()
    u = User.objects.create_user(email="cal.admin@example.com", password="pw")
    u.role = UserRole.ADMIN
    u.save()
    return u


@pytest.mark.django_db
def test_event_created_with_defaults(admin_user):
    now = timezone.now()
    event = CalendarEvent.objects.create(
        title="Board Meeting",
        start_datetime=now,
        end_datetime=now,
        created_by=admin_user,
    )
    assert event.visibility == CalendarEvent.Visibility.PUBLIC
    assert event.event_type == CalendarEvent.EventType.OTHER
    assert str(event).startswith("Board Meeting")


@pytest.mark.django_db
def test_attendee_default_invited(admin_user):
    now = timezone.now()
    event = CalendarEvent.objects.create(
        title="Workshop",
        start_datetime=now,
        end_datetime=now,
    )
    attendee = EventAttendee.objects.create(event=event, user=admin_user)
    assert attendee.response == EventAttendee.ResponseStatus.INVITED


@pytest.mark.django_db
def test_event_ordering_by_start_datetime(db):
    t1 = timezone.now()
    t2 = t1.replace(hour=(t1.hour + 1) % 24)
    e1 = CalendarEvent.objects.create(title="Later", start_datetime=t2, end_datetime=t2)
    e2 = CalendarEvent.objects.create(title="Earlier", start_datetime=t1, end_datetime=t1)
    events = list(CalendarEvent.objects.all())
    assert events[0] == e2
    assert events[1] == e1
