from sqlmodel import SQLModel
from sqlalchemy.ext.asyncio import create_async_engine, AsyncEngine
from sqlmodel.ext.asyncio.session import AsyncSession
from gsap_broker.settings import settings

engine: AsyncEngine = create_async_engine(settings.database_url, echo=False)

async def init_db():
    async with engine.begin() as conn:
        await conn.run_sync(SQLModel.metadata.create_all)
        # Schema migrations for existing DBs:
        try:
            await conn.execute(
                __import__("sqlalchemy").text("ALTER TABLE authorization_contexts ADD COLUMN session_mode BOOLEAN DEFAULT 0")
            )
        except Exception:
            pass  # Column already exists

async def get_session():
    async with AsyncSession(engine) as session:
        yield session
