from __future__ import annotations

from typing import Any

from app.schemas.common import ApiModel


class PermissionContextRead(ApiModel):
    is_admin: bool = False
    can_manage_sites: bool = False
    can_manage_experiments: bool = False
    can_manage_variants: bool = False
    can_manage_releases: bool = False
    can_manage_goals: bool = False
    can_manage_sdk_configs: bool = False
    can_use_editor: bool = False
    can_read_runtime: bool = False
    raw_permissions: list[str] = []


class AuthenticatedUser(ApiModel):
    """Normalized current-user payload used by FastAPI.

    We keep the shape close to current frontend needs so migration can happen
    incrementally without losing role/group context.
    """

    id: str
    email: str | None = None
    first_name: str | None = None
    status: str | None = None
    fb_token: str | None = None
    role: dict[str, Any] | None = None
    user_group: dict[str, Any] | None = None
    domain_permissions: list[str] = []
    permissions: PermissionContextRead


class AuthMeResponse(ApiModel):
    user: AuthenticatedUser
