# retoor <retoor@molodetz.nl>

import requests
from tests.conftest import BASE_URL
from devplacepy.database import get_table


def _config(page, **fields):
    page.request.post(f"{BASE_URL}/admin/services/openai/config", form=fields)


def _grant_ai_consent(page, username):
    page.request.post(
        f"{BASE_URL}/profile/{username}/consent",
        form={"kind": "ai_third_party", "granted": "1"},
    )


def test_embeddings_disabled_returns_503(alice):
    page, _ = alice
    page.request.post(f"{BASE_URL}/admin/services/openai/stop")
    try:
        r = requests.post(
            f"{BASE_URL}/openai/v1/embeddings", json={"input": "hello"}
        )
        assert r.status_code == 503
    finally:
        page.request.post(f"{BASE_URL}/admin/services/openai/start")


def test_embeddings_requires_auth(alice):
    page, _ = alice
    page.request.post(f"{BASE_URL}/admin/services/openai/start")
    _config(page, gateway_access_key="embedkey")
    try:
        no_creds = requests.post(
            f"{BASE_URL}/openai/v1/embeddings", json={"input": "hello"}
        )
        assert no_creds.status_code == 401
    finally:
        _config(page, gateway_access_key="")
        page.request.post(f"{BASE_URL}/admin/services/openai/start")


def test_embeddings_auth_passes_upstream_unreachable(alice):
    page, user = alice
    page.request.post(f"{BASE_URL}/admin/services/openai/start")
    _config(
        page,
        gateway_embed_enabled="1",
        gateway_embed_url="http://127.0.0.1:9/embeddings",
        gateway_access_key="embedkey",
    )
    try:
        with_key = requests.post(
            f"{BASE_URL}/openai/v1/embeddings",
            headers={"X-API-KEY": "embedkey"},
            json={"model": "molodetz~embed", "input": "hello"},
        )
        assert with_key.status_code == 502

        admin_key = get_table("users").find_one(username=user["username"])["api_key"]
        _grant_ai_consent(page, user["username"])
        with_admin = requests.post(
            f"{BASE_URL}/openai/v1/embeddings",
            headers={"Authorization": f"Bearer {admin_key}"},
            json={"model": "molodetz~embed", "input": "hello"},
        )
        assert with_admin.status_code == 502
    finally:
        _config(page, gateway_access_key="")
        page.request.post(f"{BASE_URL}/admin/services/openai/start")


def test_embeddings_disabled_via_config_returns_503(alice):
    page, _ = alice
    page.request.post(f"{BASE_URL}/admin/services/openai/start")
    _config(page, gateway_embed_enabled="0", gateway_access_key="embedkey")
    try:
        r = requests.post(
            f"{BASE_URL}/openai/v1/embeddings",
            headers={"X-API-KEY": "embedkey"},
            json={"input": "hello"},
        )
        assert r.status_code == 503
    finally:
        _config(page, gateway_embed_enabled="1", gateway_access_key="")
        page.request.post(f"{BASE_URL}/admin/services/openai/start")
