"""
SQLAlchemy 엔진 및 세션 설정 모듈.
프로젝트 루트 디렉토리에 whisper.db SQLite 파일을 생성합니다.
"""
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, sessionmaker

# 프로젝트 루트 기준 DB 경로
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
DATABASE_URL = f"sqlite:///{os.path.join(BASE_DIR, 'whisper.db')}"

engine = create_engine(
    DATABASE_URL,
    connect_args={"check_same_thread": False},  # SQLite + 멀티스레드 허용
    echo=False  # SQL 쿼리 로깅: 필요 시 True로 변경
)

SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)

class Base(DeclarativeBase):
    pass

def get_db():
    """FastAPI Depends용 DB 세션 제공 함수 (컨텍스트 매니저)"""
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

def init_db():
    """모든 테이블을 생성 (최초 1회 실행)"""
    # models.py를 임포트하여 Base 메타데이터에 테이블 등록
    from app.db import models  # noqa: F401
    Base.metadata.create_all(bind=engine)
