import pytest
from django.contrib.auth import get_user_model
from rest_framework.test import APIClient
from apps.companies.models import Organization, OrganizationMembership
from apps.events.models import Event
from django.utils import timezone

User = get_user_model()

@pytest.mark.django_db
def test_event_list_is_capped_and_pages_are_stable():
    org = Organization.objects.create(name="Pag Org")
    u = User.objects.create_user(email="p@pag.test", password="p", organization_role="director")
    OrganizationMembership.objects.create(organization=org, user=u)
    now = timezone.now()
    # Same start_date on purpose: exercises the id tie-breaker.
    for i in range(120):
        Event.objects.create(organization=org, name=f"E{i}", organizer=u,
                             start_date=now, end_date=now, event_type="seminar")
    c = APIClient(); c.force_authenticate(u)

    r = c.get("/api/events/")
    assert r.status_code == 200
    assert len(r.data["results"]) == 100, "page size not enforced"
    assert r.data["count"] == 120

    # max_page_size caps an oversized request.
    r2 = c.get("/api/events/?page_size=500")
    assert len(r2.data["results"]) <= 200

    # No row repeats or vanishes across the page boundary.
    ids1 = [x["id"] for x in r.data["results"]]
    ids2 = [x["id"] for x in c.get("/api/events/?page=2").data["results"]]
    assert len(set(ids1) & set(ids2)) == 0, "pages overlap — ordering not deterministic"
    assert len(set(ids1) | set(ids2)) == 120, "rows lost across pages"
