from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
from sqlalchemy.orm import DeclarativeBase
from app.core.config import settings

# 1. Aszinkron motor létrehozása
# A "future=True" biztosítja a kompatibilitást a legújabb SQLAlchemy verziókkal
engine = create_async_engine(
    settings.DATABASE_URL,
    echo=False,  # Állítsd True-ra, ha látni akarod az SQL lekérdezéseket a logban
    future=True
)

# 2. Session Factory (ez gyártja a kapcsolatokat a kérésekhez)
AsyncSessionLocal = async_sessionmaker(
    bind=engine,
    class_=AsyncSession,
    expire_on_commit=False,
    autoflush=False
)

# 3. Base osztály (minden adatbázis modell ebből fog öröklődni)
class Base(DeclarativeBase):
    pass

# 4. Dependency (Ezt használjuk majd a FastAPI végpontokban: Depends(get_db))
async def get_db():
    async with AsyncSessionLocal() as session:
        try:
            yield session
            # Ha sikeres, a tranzakció commitolódik (ha explicit kérjük)
        except Exception:
            await session.rollback()
            raise
        finally:
            await session.close()
