# retoor <retoor@molodetz.nl>

from datetime import datetime, timezone
from starlette.requests import Request
from tests.conftest import BASE_URL
from devplacepy.database import get_table, set_setting
from devplacepy.utils import generate_uid
from devplacepy.services.openai_gateway import GatewayService
from devplacepy.services.openai_gateway.analytics import build_user_usage
from devplacepy.services.devii.config import (
    build_settings,
    FIELD_AI_URL,
    FIELD_AI_MODEL,
    FIELD_AI_KEY,
    FIELD_MAX_ITERATIONS,
    FIELD_PLAN_REQUIRED,
    FIELD_VERIFY_REQUIRED,
)
def _now_iso_ai_usage_profile():
    return datetime.now(timezone.utc).isoformat()
def _make_user_ai_usage_profile(role="Member"):
    username = f"aiu_{generate_uid()[:8]}"
    api_key = generate_uid()
    uid = generate_uid()
    get_table("users").insert(
        {
            "uid": uid,
            "username": username,
            "terms_version": "1",
            "email": f"{username}@t.dev",
            "api_key": api_key,
            "role": role,
            "is_active": True,
        }
    )
    return uid, username, api_key
def _make_request_ai_usage_profile(headers):
    raw = [(k.lower().encode(), v.encode()) for k, v in headers.items()]
    return Request(
        {
            "type": "http",
            "method": "POST",
            "path": "/openai/v1/chat/completions",
            "query_string": b"",
            "headers": raw,
            "state": {},
        }
    )
def _seed_gateway(uid, n=3, cost=0.01, kind="user"):
    table = get_table("gateway_usage_ledger")
    for _ in range(n):
        table.insert(
            {
                "created_at": _now_iso_ai_usage_profile(),
                "owner_kind": kind,
                "owner_id": uid,
                "backend": "chat",
                "model": "molodetz",
                "success": 1,
                "status_code": 200,
                "prompt_tokens": 1000,
                "completion_tokens": 300,
                "total_tokens": 1300,
                "upstream_latency_ms": 1500.0,
                "tokens_per_second": 40.0,
                "cost_usd": cost,
            }
        )
def _devii_cfg():
    return {
        FIELD_AI_URL: "",
        FIELD_AI_MODEL: "",
        FIELD_AI_KEY: "INTERNAL-KEY",
        FIELD_MAX_ITERATIONS: "40",
        FIELD_PLAN_REQUIRED: "1",
        FIELD_VERIFY_REQUIRED: "1",
    }
def _goto_profile(page, username):
    page.goto(f"{BASE_URL}/profile/{username}", wait_until="domcontentloaded")


def test_admin_sees_full_ai_usage_on_profile(alice):
    page, user = alice
    _goto_profile(page, user["username"])
    page.locator("[data-ai-usage]").wait_for(state="visible")
    assert (
        page.locator("[data-ai-usage] .ai-usage-title", has_text="AI usage").count()
        == 1
    )
    assert page.locator("[data-ai-usage] [data-ai-quota]").count() == 1


def test_member_sees_only_quota_percentage(bob):
    page, user = bob
    _goto_profile(page, user["username"])
    card = page.locator(".ai-quota-only")
    card.wait_for(state="visible")
    assert (
        page.locator(".ai-quota-only .ai-usage-title", has_text="AI quota").count() == 1
    )
    assert "%" in page.locator(".ai-quota-only .ai-quota-pct").first.inner_text()
    assert page.locator("[data-ai-usage]").count() == 0


def test_member_cannot_see_ai_on_another_profile(bob, seeded_db):
    page, _ = bob
    _goto_profile(page, seeded_db["alice"]["username"])
    assert page.locator("[data-ai-usage]").count() == 0
    assert page.locator("[data-ai-quota]").count() == 0
