"""Shared fixtures for assistant tests."""
from __future__ import annotations

import pytest
from django.contrib.auth import get_user_model
from django.core.files.base import ContentFile

from apps.core.permissions.roles import UserRole


User = get_user_model()


@pytest.fixture
def learner_user(db):
    u = User.objects.create_user(email="learner@test.example", password="pw-test-1234")
    u.role = UserRole.LEARNER
    u.save()
    return u


@pytest.fixture
def alumni_user(db):
    u = User.objects.create_user(email="alumna@test.example", password="pw-test-1234")
    u.role = UserRole.ALUMNI
    u.save()
    return u


@pytest.fixture
def admin_user(db):
    u = User.objects.create_user(email="assistant.admin@test.example", password="pw-test-1234")
    u.role = UserRole.ADMIN
    u.save()
    return u


@pytest.fixture
def submitter_user(db):
    u = User.objects.create_user(email="submitter@test.example", password="pw-test-1234")
    u.role = UserRole.SCHOLAR
    u.save()
    return u


@pytest.fixture
def repo_manager_user(db):
    u = User.objects.create_user(email="repo.manager@test.example", password="pw-test-1234")
    u.role = UserRole.REPO_MANAGER
    u.save()
    return u


@pytest.fixture
def public_collection(db, repo_manager_user):
    from apps.repository.documents.models import Collection

    col, _ = Collection.objects.update_or_create(
        slug="theses-assistant",
        defaults={
            "name": "Theses (assistant tests)",
            "visibility": Collection.Visibility.PUBLIC_OPEN,
            "qa_workflow_enabled": True,
        },
    )
    col.managed_by.add(repo_manager_user)
    return col


@pytest.fixture
def sample_pdf():
    return ContentFile(
        b"%PDF-1.4\n%\xe2\xe3\xcf\xd3\n1 0 obj<</Type/Catalog>>endobj\ntrailer<<>>\n%%EOF\n",
        name="sample.pdf",
    )
