# retoor <retoor@molodetz.nl>

from datetime import datetime, timezone

import pytest
from fastapi.testclient import TestClient

from devplacepy.database import get_table, internal_gateway_key, purge, refresh_snapshot
from devplacepy.main import app
from devplacepy.services.manager import service_manager
from devplacepy.utils import generate_uid


def _seed_schema():
    now = datetime.now(timezone.utc).isoformat()
    users = get_table("users")
    if "username" not in users.columns:
        users.insert(
            {
                "uid": generate_uid(),
                "username": "dbapi_seed",
                "email": "seed@dbapi.test",
                "role": "Member",
                "xp": 0,
                "level": 1,
                "created_at": now,
            }
        )
    bookmarks = get_table("bookmarks")
    if "user_uid" not in bookmarks.columns:
        seed = generate_uid()
        bookmarks.insert(
            {
                "uid": seed,
                "user_uid": "_seedcols",
                "target_type": "post",
                "target_uid": "_s",
                "created_at": now,
                "deleted_at": None,
                "deleted_by": None,
            }
        )
        purge("bookmarks", uid=seed)
    refresh_snapshot()


@pytest.fixture(scope="module")
def client():
    with TestClient(app) as test_client:
        service_manager.set_lock_owner(True)
        _seed_schema()
        yield test_client
        service_manager.set_lock_owner(False)


@pytest.fixture
def auth(client):
    return {"X-API-KEY": internal_gateway_key()}
