from __future__ import annotations

from dataclasses import dataclass
from typing import Annotated

from fastapi import Depends, Header, HTTPException

from app.config import get_settings


@dataclass
class AuthUser:
    business_id: int
    user_id: int | None
    name: str | None
    email: str | None


def get_current_user(
    x_business_id: Annotated[str | None, Header()] = None,
    x_user_id: Annotated[str | None, Header()] = None,
    x_user_name: Annotated[str | None, Header()] = None,
    x_user_email: Annotated[str | None, Header()] = None,
) -> AuthUser:
    """
    Parity with Laravel Auth::user()->business_id.
    Production: replace with JWT validation; for parity use headers:
    X-Business-Id, X-User-Id, X-User-Name
    """
    settings = get_settings()
    if x_business_id:
        try:
            bid = int(x_business_id)
        except ValueError as e:
            raise HTTPException(status_code=401, detail="Invalid X-Business-Id") from e
        uid = int(x_user_id) if x_user_id else None
        return AuthUser(
            business_id=bid,
            user_id=uid,
            name=x_user_name,
            email=x_user_email,
        )
    if settings.dev_business_id is not None:
        return AuthUser(
            business_id=int(settings.dev_business_id),
            user_id=settings.dev_user_id,
            name=settings.dev_user_name,
            email=None,
        )
    raise HTTPException(status_code=401, detail="Authentication required (X-Business-Id)")
