"""FastAPI dependencies for authentication."""

from __future__ import annotations

from fastapi import Header, HTTPException

from core.auth import verify_jwt


def get_current_user(authorization: str = Header(None)) -> dict:
    """Extract and verify Bearer token, return user payload.

    Raises 401 if token is missing or invalid.
    """
    if not authorization or not authorization.startswith("Bearer "):
        raise HTTPException(401, "Missing or invalid Authorization header")
    token = authorization.removeprefix("Bearer ").strip()
    try:
        return verify_jwt(token)
    except Exception:
        raise HTTPException(401, "Invalid or expired token")


def get_optional_user(authorization: str = Header(None)) -> dict | None:
    """Same as get_current_user but returns None if no token."""
    if not authorization or not authorization.startswith("Bearer "):
        return None
    token = authorization.removeprefix("Bearer ").strip()
    try:
        return verify_jwt(token)
    except Exception:
        return None


def get_admin_user(authorization: str = Header(None)) -> dict:
    """Require authenticated admin user. Raises 401/403."""
    user = get_current_user(authorization)
    if not user.get("is_admin"):
        raise HTTPException(403, "관리자 권한이 필요합니다")
    return user
