import pytest
from httpx import AsyncClient

from lnbits.settings import Settings


@pytest.mark.anyio
async def test_admin_get_settings_permission_denied(client, from_user):
    response = await client.get(f"/admin/api/v1/settings?usr={from_user.id}")
    assert response.status_code == 401


@pytest.mark.anyio
async def test_admin_get_settings(client: AsyncClient, superuser_token: str):
    response = await client.get(
        "/admin/api/v1/settings",
        headers={"Authorization": f"Bearer {superuser_token}"},
    )
    assert response.status_code == 200
    result = response.json()
    assert "super_user" not in result


@pytest.mark.anyio
async def test_admin_update_settings(
    client: AsyncClient, superuser_token: str, settings: Settings
):
    new_site_title = "UPDATED SITETITLE"
    response = await client.put(
        "/admin/api/v1/settings",
        json={"lnbits_site_title": new_site_title},
        headers={"Authorization": f"Bearer {superuser_token}"},
    )
    assert response.status_code == 200
    result = response.json()
    assert "status" in result
    assert result.get("status") == "Success"
    assert settings.lnbits_site_title == new_site_title


@pytest.mark.anyio
async def test_admin_update_noneditable_settings(
    client: AsyncClient,
    superuser_token: str,
):
    response = await client.put(
        "/admin/api/v1/settings",
        json={"super_user": "UPDATED"},
        headers={"Authorization": f"Bearer {superuser_token}"},
    )
    assert response.status_code == 400