"""API-level tests: the real FastAPI app wired to the reporting scratch
database (migrated fixture graph), with signed session cookies for the
migrated rian/adi users. Each identity gets its OWN TestClient so tests
can hold both at once without cookie clobbering."""

import pytest
from fastapi.testclient import TestClient

from app.main import create_app
from app.services.auth import session as auth_session

# reuse the migrated scratch DB fixtures
from tests.reporting.conftest import rpt_engine, rpt_url  # noqa: F401


@pytest.fixture()
def client_factory(rpt_engine, monkeypatch):  # noqa: F811
    from app import db as app_db

    monkeypatch.setattr(app_db, "get_engine", lambda: rpt_engine)
    clients: list[TestClient] = []

    def make(username: str, email: str = "", is_super_admin: bool = False) -> TestClient:
        client = TestClient(create_app(), base_url="https://testserver")
        client.__enter__()
        clients.append(client)
        token = auth_session.mint_session(
            username=username, email=email, is_super_admin=is_super_admin
        )
        client.cookies.set(auth_session.SESSION_COOKIE, token)
        return client

    yield make
    for client in clients:
        client.__exit__(None, None, None)


@pytest.fixture()
def as_rian(client_factory):
    return client_factory("rian", "rian@rian.ca", is_super_admin=True)


@pytest.fixture()
def as_adi(client_factory):
    return client_factory("adi", "info@adipramono.com")
