"""Database base configuration"""
import os
from pathlib import Path
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
from app.core.config import settings

# Create base class for models
Base = declarative_base()

# Ensure database directory exists
db_path = Path.home() / ".config" / "syui" / "ai" / "card"
db_path.mkdir(parents=True, exist_ok=True)

# Select database URL based on configuration
database_url = settings.database_url_supabase if settings.use_supabase else settings.database_url

# Expand ~ in database URL
if database_url.startswith("sqlite"):
    database_url = database_url.replace("~", str(Path.home()))

# Create async engine (SQLite-optimized settings)
if "sqlite" in database_url:
    engine = create_async_engine(
        database_url,
        echo=settings.debug,
        future=True,
        # SQLite-specific optimizations
        connect_args={"check_same_thread": False}
    )
else:
    # PostgreSQL settings (fallback)
    engine = create_async_engine(
        database_url,
        echo=settings.debug,
        future=True,
        pool_pre_ping=True,
        pool_size=5,
        max_overflow=10
    )

# Create async session factory
async_session = async_sessionmaker(
    engine,
    class_=AsyncSession,
    expire_on_commit=False
)


async def get_session() -> AsyncSession:
    """Dependency to get database session"""
    async with async_session() as session:
        yield session