# # ------------------------------------------------------------------------- sync db start ----------------------------------------

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

# load_dotenv()

# DATABASE_URL = os.getenv("DATABASE_URL")

# # SQLAlchemy Engine
# engine = create_engine( DATABASE_URL, pool_pre_ping=True, echo=False )

# # Session factory
# SessionLocal = sessionmaker(
#     autocommit=False,
#     autoflush=False,
#     bind=engine
# )

# # Base class for all models
# Base = declarative_base()


# # ---------------------------------------------------------
# # Provide database session to FastAPI routes
# # ---------------------------------------------------------
# def get_db():
#     db = SessionLocal()
#     try:
#         yield db
#     finally:
#         db.close()

# # ------------------------------------------------------------------------- sync db end ----------------------------------------


# database.py

import os
from dotenv import load_dotenv
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession,async_sessionmaker
from sqlalchemy.orm import sessionmaker, declarative_base

load_dotenv()

DATABASE_URL = os.getenv("DATABASE_URL")

# IMPORTANT: must use async driver !!!
# mysql+aiomysql instead of mysql+pymysql
DATABASE_URL = DATABASE_URL.replace("mysql+pymysql", "mysql+aiomysql")

engine = create_async_engine(
    DATABASE_URL,
    echo=False,
    pool_pre_ping=True
)

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

Base = declarative_base()

async def get_db():
    # print(">>> CONNECTING TO:", engine.url)
    async with SessionLocal() as session:
        yield session

