"""Turso database layer using SQLModel + sqlalchemy-libsql.

Provides:
- get_session(): FastAPI dependency for async-compatible DB sessions
"""

import os
from typing import Generator

from sqlmodel import Session, SQLModel, create_engine

TURSO_DB_URL = os.getenv("TURSO_DB_URL", "")
TURSO_AUTH_TOKEN = os.getenv("TURSO_AUTH_TOKEN", "")


def _build_url() -> str:
    """Convert Turso URL to SQLAlchemy connection string."""
    if not TURSO_DB_URL:
        raise RuntimeError("TURSO_DB_URL must be set")
    host = TURSO_DB_URL.replace("libsql://", "").replace("https://", "")
    return f"sqlite+libsql://{host}?secure=true"


engine = create_engine(
    _build_url(),
    echo=False,
    connect_args={
        "check_same_thread": False,
        "auth_token": TURSO_AUTH_TOKEN,
    },
)


def get_session() -> Generator[Session, None, None]:
    """FastAPI dependency — yields a DB session, auto-closes after request."""
    with Session(engine) as session:
        yield session
