"""
資料庫連線管理
"""
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
from typing import Generator

from app.core.config import settings

# 延遲初始化避免模組導入時就連接資料庫
_engine = None
_SessionLocal = None

def get_engine():
    """獲取資料庫引擎 (延遲初始化)"""
    global _engine
    if _engine is None:
        _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

# 向後兼容
engine = property(lambda self: get_engine())
SessionLocal = property(lambda self: get_session_local())


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