import pytest
from httpx import AsyncClient
from pathlib import Path


async def test_get_libraries_without_auth(client: AsyncClient) -> None:
    response = await client.get("/libraries?library_id=1")
    assert response.status_code == 401


async def test_get_libraries_with_auth(authenticated_client: AsyncClient) -> None:
    response = await authenticated_client.get("/libraries?library_id=1")
    assert response.status_code == 200


@pytest.mark.parametrize(
    ("name", "read_only", "expected_status_code"),
    [("Test Library", False, 201), ("Read-Only Library", True, 400)],
)
async def test_create_library(
    authenticated_client: AsyncClient,
    tmp_path: Path,
    name: str,
    read_only: bool,
    expected_status_code: int,
) -> None:
    library_data = {
        "name": "Test Library",
        "root_path": f"{tmp_path}/books",
        "path_template": "{author}/{title}",
        "read_only": read_only,
    }

    response = await authenticated_client.post("/libraries", json=library_data)

    assert response.status_code == expected_status_code

    if response.status_code == 201:
        result = response.json()
        assert result["name"] == "Test Library"
        assert result["root_path"] == f"{tmp_path}/books"
        assert result["path_template"] == "{author}/{title}"
        assert result["read_only"] == False
        assert result["description"] is None
