# /opt/docker/dev/service_finder/backend/app/database.py
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
from sqlalchemy.orm import DeclarativeBase
from app.core.config import settings

# 1. Base definíciója - Ezt importálják a modellek
class Base(DeclarativeBase):
    """
    Központi SQLAlchemy Base osztály.
    A modellek a 'from app.database import Base' segítségével érik el.
    """
    pass

# 2. Engine és SessionLocal beállítása
engine = create_async_engine(
    str(settings.SQLALCHEMY_DATABASE_URI),
    echo=settings.DEBUG_MODE,
    pool_size=20,
    max_overflow=10,
    pool_pre_ping=True,
)

AsyncSessionLocal = async_sessionmaker(
    autocommit=False,
    autoflush=False,
    bind=engine,
    class_=AsyncSession,
    expire_on_commit=False
)

# 3. A "Körforgás-törő" függvény
def ensure_models_loaded():
    """
    Dinamikusan betölti az összes modellt a regiszter segítségével.
    Helyi importot használunk, hogy elkerüljük a körkörös függőséget:
    database -> registry -> database (Base)
    """
    try:
        # Itt importálunk helyben, így a Base már létezik a memóriában
        from app.models.registry import load_all_models
        load_all_models()
        print("✅ Adatbázis modellek regisztrálva a MetaData-ba.")
    except ImportError as e:
        print(f"⚠️ Hiba a modellek dinamikus betöltésekor: {e}")

# Automatikus betöltés meghívása (opcionális, de ajánlott az API indításakor)
# ensure_models_loaded()