# documents/tests/test_folders.py

import pytest
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient
from users.models import User
from documents.models import Folder, Document


@pytest.mark.django_db
def test_contents_returns_folder_data():
    user1 = User.objects.create_user(
        email="test_admin@core.com", name="User1", password="admin123", can_edit_folders=True
    )
    folder = Folder.objects.create(name="Carpeta Principal", created_by=user1, is_public=False)
    Document.objects.create(name="Documento1", folder=folder, created_by=user1, is_public=True)

    client = APIClient()
    client.force_authenticate(user=user1)

    url = reverse("folder-contents", args=[folder.id])
    response = client.get(url)

    assert response.status_code == status.HTTP_200_OK
    assert "folder" in response.data
    assert "documents" in response.data
    assert len(response.data["documents"]) == 1


@pytest.mark.django_db
def test_add_user_access_success():
    user1 = User.objects.create_user(email="user1@test.com", name="User1", password="pass123", can_edit_folders=True)
    user2 = User.objects.create_user(email="user2@test.com", name="User2", password="pass123", can_edit_folders=True)
    folder = Folder.objects.create(name="Carpeta Principal", created_by=user1, is_public=False)

    client = APIClient()
    client.force_authenticate(user=user1)

    url = reverse("folder-add-user-access", args=[folder.id])
    response = client.post(url, {"user_id": user2.id}, format="json")

    assert response.status_code == status.HTTP_200_OK
    
    folder.refresh_from_db()
    assert user2 in folder.allowed_users.all()


@pytest.mark.django_db
def test_add_user_access_requires_permission():
    user1 = User.objects.create_user(
        email="user1@test.com", name="User1", password="pass123", can_edit_folders=True
    )
    user2 = User.objects.create_user(email="user2@test.com", name="User2", password="pass123")
    folder = Folder.objects.create(name="Carpeta Principal", created_by=user1, is_public=False)

    client = APIClient()
    client.force_authenticate(user=user2)

    url = reverse("folder-add-user-access", args=[folder.id])
    response = client.post(url, {"user_id": user1.id}, format="json")

    assert response.status_code == status.HTTP_404_NOT_FOUND


@pytest.mark.django_db
def test_add_user_access_user_not_found():
    user1 = User.objects.create_user(
        email="user1@test.com", name="User1", password="pass123", can_edit_folders=True
    )
    folder = Folder.objects.create(name="Carpeta Principal", created_by=user1, is_public=False)

    client = APIClient()
    client.force_authenticate(user=user1)

    url = reverse("folder-add-user-access", args=[folder.id])
    response = client.post(url, {"user_id": 999}, format="json")

    assert response.status_code == status.HTTP_404_NOT_FOUND
