"""
Nom du script : session.py
Chemin : /gitlab-bridge/app/db/session.py
Description : Création du moteur SQLAlchemy et des sessions synchrones.
Options éventuelles : Aucune.
Exemples d'utilisation : Utiliser `SessionLocal()` dans les services.
Prérequis : Python 3.11+, SQLAlchemy 2.x, PyMySQL.
Auteur : Sylvain SCATTOLINI
Date de création / modification : 2026-03-25
Version : 1.1
"""

from __future__ import annotations

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

from app.core.config import settings

engine = create_engine(
    settings.sqlalchemy_database_url,
    echo=settings.db_echo,
    future=True,
    pool_pre_ping=True,
)

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


def get_db_session() -> Session:
    """Dépendance FastAPI pour obtenir une session SQLAlchemy."""
    session = SessionLocal()
    try:
        yield session
    finally:
        session.close()
