import os
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
from sqlalchemy.orm import declarative_base
from dotenv import load_dotenv

# Cargar variables de entorno desde el archivo .env
dotenv_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), ".env")
load_dotenv(dotenv_path)

# La URL de la base de datos se leerá del .env o usará la por defecto
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql+asyncpg://project_admin:secure_password_here@localhost:5432/gestion_proyectos")

# Crear el motor asíncrono
engine = create_async_engine(DATABASE_URL, echo=False)

# Fábrica de sesiones asíncronas
AsyncSessionLocal = async_sessionmaker(autocommit=False, autoflush=False, bind=engine, expire_on_commit=False)

# Clase base para los modelos SQLAlchemy
Base = declarative_base()

async def get_db():
    async with AsyncSessionLocal() as session:
        yield session
