"""
Smoke-tests: проверяем что все ключевые роуты не падают с NameError/ImportError.
Не проверяем бизнес-логику — только что страницы отдают ответ.
"""
import pytest


# ── Публичные страницы ──────────────────────────────────────────────────────

def test_index_anonymous(client):
    """Главная без авторизации — либо страница сервисов, либо логин."""
    r = client.get("/", follow_redirects=True)
    assert r.status_code == 200


def test_login_form_on_index(client):
    """Форма логина рендерится на /."""
    r = client.get("/", follow_redirects=True)
    assert r.status_code == 200
    assert "csrf" in r.text.lower() or "login" in r.text.lower() or "пароль" in r.text.lower()


def _get_csrf(client):
    from conftest import _extract_csrf
    return _extract_csrf(client)


def test_login_wrong_password(client):
    csrf = _get_csrf(client)
    r = client.post("/login", data={
        "username": "admin",
        "password": "wrongpass",
        "csrf_token": csrf,
    })
    assert r.status_code in (200, 401)


def test_login_csrf_fail(client):
    r = client.post("/login", data={
        "username": "admin",
        "password": "testpass123",
        "csrf_token": "bad-token",
    })
    assert r.status_code == 403


def test_login_no_such_method(client):
    r = client.get("/login")
    assert r.status_code in (200, 405)  # только документируем поведение


# ── Авторизованные страницы ─────────────────────────────────────────────────

def test_login_success(auth_client):
    r = auth_client.get("/", follow_redirects=True)
    assert r.status_code == 200


def test_admin_page(auth_client):
    r = auth_client.get("/admin")
    assert r.status_code == 200


def test_admin_requires_auth(client):
    from fastapi.testclient import TestClient
    import main as app_module
    fresh = TestClient(app_module.app, raise_server_exceptions=False)
    r = fresh.get("/admin", follow_redirects=False)
    assert r.status_code in (302, 303, 401, 403)


# ── API роуты ───────────────────────────────────────────────────────────────

def test_api_services_list(auth_client):
    r = auth_client.get("/api/admin/services")
    assert r.status_code in (200, 404, 405)


def test_api_users_list(auth_client):
    r = auth_client.get("/api/admin/users")
    assert r.status_code in (200, 404, 405)


def test_api_categories(auth_client):
    r = auth_client.get("/api/admin/categories")
    assert r.status_code in (200, 404, 405)


# ── Несуществующие роуты ────────────────────────────────────────────────────

def test_404(client):
    r = client.get("/this-does-not-exist-xyz")
    assert r.status_code == 404


def test_session_unknown(auth_client):
    r = auth_client.get("/s/00000000-0000-0000-0000-000000000000/")
    assert r.status_code in (200, 302, 303, 404)


def test_go_unknown_slug(auth_client):
    r = auth_client.get("/go/nonexistent-service-slug", follow_redirects=False)
    assert r.status_code in (302, 303, 404)
