"""Saved-views service tests run on an in-memory SQLite DB (the models
are portable) with two seeded users — no Postgres needed. The HTTP/auth
tests (test_saved_views_api.py) reuse the routers harness."""

import types
import uuid

import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from sqlalchemy.pool import StaticPool

from app.models import Base, User


@pytest.fixture()
def sqlite_engine():
    engine = create_engine(
        "sqlite://",
        connect_args={"check_same_thread": False},
        poolclass=StaticPool,
    )
    Base.metadata.create_all(engine)
    yield engine
    engine.dispose()


@pytest.fixture()
def users(sqlite_engine):
    """rian (super admin) + adi, keyed by idauth_username."""
    ids: dict[str, uuid.UUID] = {}
    with Session(sqlite_engine) as session:
        for username, sa in (("rian", True), ("adi", False)):
            uid = uuid.uuid4()
            session.add(
                User(
                    id=uid,
                    idauth_username=username,
                    email=f"{username}@example.com",
                    is_super_admin=sa,
                )
            )
            ids[username] = uid
        session.commit()
    return ids


@pytest.fixture()
def session(sqlite_engine):
    with Session(sqlite_engine) as s:
        yield s


def actor_for(user_id: uuid.UUID | None, **overrides):
    """The saved-views service only reads actor.real_user_id (personal
    prefs key on the REAL user). A tiny stand-in avoids the full Actor."""
    fields = {"real_user_id": user_id, "user_id": user_id, "is_viewing_as": False}
    fields.update(overrides)
    return types.SimpleNamespace(**fields)
