import uuid
from datetime import datetime, timezone
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from app.core.database import Base
from app.models.catalog import UserAccount, Session, ProjectRegistry, ProjectMember
from app.logging.models import ActivityLog


def make_engine():
    engine = create_engine("sqlite:///:memory:", echo=False)
    Base.metadata.create_all(engine)
    return engine


def test_create_all_tables():
    engine = make_engine()
    table_names = engine.dialect.get_table_names(engine.connect())
    assert "user_account" in table_names
    assert "session" in table_names
    assert "project_registry" in table_names
    assert "project_member" in table_names
    assert "activity_log" in table_names


def test_insert_user_account():
    engine = make_engine()
    Session_ = sessionmaker(bind=engine)
    now = datetime.now(timezone.utc).isoformat()

    with Session_() as session:
        user = UserAccount(
            id=str(uuid.uuid4()),
            username="testuser",
            display_name="Test User",
            password_hash="hashed",
            role="admin",
            is_active=1,
            created_at=now,
            updated_at=now,
        )
        session.add(user)
        session.commit()

        count = session.query(UserAccount).count()
        assert count == 1
