from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
from src.config import settings  # Import from the centralized settings file
from src.models.base import Base

# You MUST import all models here so they are registered with Base.metadata
from src.models.users.models import Users
from src.models.project.models import Project
from src.models.member.models import Member
from src.models.module.models import Module
from src.models.task.models import Task, TaskAssignedMember

# Create async engine using the fully loaded settings
engine = create_async_engine(settings.DATABASE_URL, echo=True)

# Create async session
AsyncSessionLocal = sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False)

# This needs to be run asynchronously, or use engine.run_sync()
# to create tables when starting your application.
# Base.metadata.create_all(bind=engine)

# Dependency
async def get_db():
    async with AsyncSessionLocal() as session:
        yield session
