"""Configuration centralisée de la base de données.

Ce fichier gère le chemin de la base de données et définit les tables SQLAlchemy.
Le frontend et le backend utilisent la MÊME base de données partagée.
"""

import os
from pathlib import Path
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime

# #region agent log
def write_debug_log(hypothesisId: str, location: str, message: str, data: dict = None):
    """Écrit un log NDJSON pour le debug."""
    import json
    log_entry = {
        "sessionId": "debug-session",
        "runId": "run1",
        "hypothesisId": hypothesisId,
        "location": location,
        "message": message,
        "data": data or {},
        "timestamp": datetime.now().timestamp() * 1000
    }
    with open(r"d:\\\\dev_new_pc\\\\chartbastan\\\\.cursor\\\\debug.log", "a") as f:
        f.write(json.dumps(log_entry) + "\\n")
# #endregion

# SQLite database (PARTAGÉE entre Next.js et FastAPI)
# Chemin absolu à la racine du projet pour que les deux utilisent la MÊME base
PROJECT_ROOT = Path(__file__).parent.parent
DB_FILENAME = "chartbastan.db"
DATABASE_PATH = PROJECT_ROOT / DB_FILENAME

# Configuration SQLAlchemy
engine = create_engine(f"sqlite:///{DATABASE_PATH.as_posix()}", connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# Déclarative base pour définir les tables
Base = declarative_base()

# #region agent log
write_debug_log("D", "database.py:19", "Database engine created", {"DATABASE_PATH": str(DATABASE_PATH)})
# #endregion

# Créer un engine à part pour les models
# Les models (User, Match, Prediction, etc.) hériteront de Base
model_engine = create_engine(f"sqlite:///{DATABASE_PATH.as_posix()}", connect_args={"check_same_thread": False})
ModelBase = declarative_base()


def get_db():
    """
    Obtenir une session de base de données.

    Yields:
        Session de base de données SQLAlchemy.
    """
    # #region agent log
    write_debug_log("D", "database.py:39", "get_db called", {})
    # #endregion
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
        # #region agent log
        write_debug_log("D", "database.py:46", "Database session closed", {})
        # #endregion


if __name__ == "__main__":
    # #region agent log
    write_debug_log("D", "database.py:32", "Database module loaded", {"status": "ready"})
    # #endregion
    print("🗄️  Configuration de la Base de Données Chartbastan")
    print("=" * 60)
    print(f"📁 Racine du projet : {PROJECT_ROOT}")
    print(f"📄 Fichier de base de données : {DATABASE_PATH}")
    print(f"🔗 URL SQLAlchemy : sqlite:///{DATABASE_PATH.as_posix()}")
    print("=" * 60)
