"""Общие зависимости FastAPI: авторизация и сессия БД."""

from typing import Annotated, cast

from fastapi import Depends, HTTPException, Request
from sqlalchemy.orm import Session

from app.db import get_db

DbDep = Annotated[Session, Depends(get_db)]


def require_user(request: Request) -> dict[str, str]:
    """Защита API: пользователь должен быть залогинен (сессия SSO)."""
    user = request.session.get("user")
    if not user:
        raise HTTPException(status_code=401, detail="Not authenticated")
    return cast(dict[str, str], user)


UserDep = Annotated[dict[str, str], Depends(require_user)]


def require_user_id(user: UserDep) -> str:
    """user_id текущего пользователя — ключ изоляции всех данных (ТЗ 1.2).

    Один слой чтения сессии: require_user уже проверил 401.
    """
    return str(user["user_id"])


UserIdDep = Annotated[str, Depends(require_user_id)]
