"""Настройка асинхронного движка SQLAlchemy и сеанса."""

from collections.abc import AsyncGenerator

from sqlalchemy.ext.asyncio import (
    AsyncEngine,
    AsyncSession,
    async_sessionmaker,
    create_async_engine,
)

from core.config import get_settings

settings = get_settings()

engine: AsyncEngine = create_async_engine(
    settings.database_url,
    pool_pre_ping=True,
    # Параметры пула — в настройках (`core/config.py`, там же расчёт бюджета
    # соединений на инстанс). Дефолт SQLAlchemy 5 + 10 под нагрузкой
    # выгребался за секунды.
    pool_size=settings.db_pool_size,
    max_overflow=settings.db_max_overflow,
    pool_timeout=settings.db_pool_timeout,
)

async_session_maker = async_sessionmaker(engine, expire_on_commit=False)


async def get_session() -> AsyncGenerator[AsyncSession, None]:
    """Зависимость FastAPI, возвращающая `AsyncSession`."""
    async with async_session_maker() as session:
        yield session
