"""
資料庫連線管理 (延遲初始化版本)
"""
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
from typing import Generator

# 延遲初始化
_engine = None
_SessionLocal = None


def get_engine():
    """獲取資料庫引擎 (延遲初始化)"""
    global _engine
    if _engine is None:
        from app.core.config import settings
        _engine = create_engine(
            settings.DATABASE_URL,
            echo=settings.DATABASE_ECHO,
            pool_pre_ping=True,
            pool_size=10,
            max_overflow=20,
        )
    return _engine


def get_session_local():
    """獲取 Session 工廠 (延遲初始化)"""
    global _SessionLocal
    if _SessionLocal is None:
        _SessionLocal = sessionmaker(
            autocommit=False,
            autoflush=False,
            bind=get_engine(),
        )
    return _SessionLocal


def get_db() -> Generator[Session, None, None]:
    """
    取得資料庫 Session
    用於 FastAPI 依賴注入
    """
    SessionLocal = get_session_local()
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
