"""
Gestion de la base de données SQLite pour l'application Versailles Airsoft.
Fournit le moteur SQLAlchemy, la session et la dépendance get_db pour FastAPI.
"""

import os
from dotenv import load_dotenv
from sqlalchemy import create_engine, text
from sqlalchemy.orm import declarative_base, sessionmaker

load_dotenv()

DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./airsoft.db")

# Configuration pour SQLite (gestion multi-threads avec FastAPI)
connect_args = {"check_same_thread": False} if DATABASE_URL.startswith("sqlite") else {}

engine = create_engine(
    DATABASE_URL,
    connect_args=connect_args,
    echo=False
)

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

Base = declarative_base()


def get_db():
    """Dépendance FastAPI pour obtenir une session de base de données."""
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


def init_db():
    """Initialise les tables dans la base de données SQLite et gère les colonnes complémentaires."""
    import models  # noqa: F401
    Base.metadata.create_all(bind=engine)

    # Migration douce pour SQLite si les colonnes discord_id ou avatar_url n'existent pas encore
    if DATABASE_URL.startswith("sqlite"):
        with engine.connect() as conn:
            try:
                conn.execute(text("ALTER TABLE users ADD COLUMN discord_id VARCHAR(64)"))
                conn.commit()
            except Exception:
                pass
            try:
                conn.execute(text("ALTER TABLE users ADD COLUMN avatar_url VARCHAR(255)"))
                conn.commit()
            except Exception:
                pass

