from __future__ import annotations

import pytest
from django.contrib.auth import get_user_model

from apps.core.authentication.models import Institution
from apps.core.permissions.roles import UserRole

User = get_user_model()


@pytest.fixture
def institution(db):
    return Institution.objects.create(
        name="Alumni Test University", country="Uganda", is_member=True
    )


@pytest.fixture
def alumni_user(db, institution):
    u = User.objects.create_user(email="alice.alumni@example.com", password="pw-alum")
    u.first_name, u.last_name = "Alice", "Alumnus"
    u.institution = institution
    u.role = UserRole.ALUMNI
    u.save()
    return u


@pytest.fixture
def scholar_user(db, institution):
    u = User.objects.create_user(email="sam.scholar@example.com", password="pw-scholar")
    u.first_name, u.last_name = "Sam", "Scholar"
    u.institution = institution
    u.role = UserRole.SCHOLAR
    u.save()
    return u


@pytest.fixture
def alumni_officer_user(db):
    u = User.objects.create_user(email="officer@example.com", password="pw-staff")
    u.role = UserRole.ALUMNI_OFFICER
    u.save()
    return u


@pytest.fixture
def scholarship(db, institution, scholar_user):
    from apps.rims.scholarships.models import Scholar, Scholarship

    programme = Scholarship.objects.create(name="Phase 5 Test Programme")
    Scholar.objects.create(
        user=scholar_user,
        scholarship=programme,
        institution=institution,
        cohort_year=2024,
    )
    return programme
