"""SQLAlchemy engine + session factory for the FastAPI app.

Deliberately separate from `db/connection.py` — that module exists for
CLI migrators / ad-hoc scripts and uses its own pool. This one is
sized for HTTP request concurrency and is consumed via the `get_db`
dependency in routers.
"""
from __future__ import annotations

from collections.abc import Generator

from sqlalchemy import create_engine
from sqlalchemy.orm import Session, sessionmaker

from backend.config import settings

engine = create_engine(
    settings.DATABASE_URL,
    pool_size=5,
    max_overflow=10,
    pool_pre_ping=True,
    future=True,
)

SessionLocal = sessionmaker(
    bind=engine,
    autoflush=False,
    autocommit=False,
    expire_on_commit=False,
)


def get_db() -> Generator[Session, None, None]:
    """FastAPI dependency: yields a Session, always closes it on exit."""
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
