# retoor <retoor@molodetz.nl>

from __future__ import annotations

from ..spec import Action
from ._shared import body, confirm, path, query


PROFILE_ACTIONS: tuple[Action, ...] = (
    Action(
        name="search_users",
        method="GET",
        path="/profile/search",
        summary="Search for users by name",
        params=(query("q", "Search query."),),
    ),
    Action(
        name="my_profile",
        method="GET",
        path="/profile",
        summary="View the current user's own profile",
        params=(query("tab", "Profile tab."),),
    ),
    Action(
        name="view_profile",
        method="GET",
        path="/profile/{username}",
        summary="View a user profile",
        requires_auth=False,
        params=(
            path("username", "Username to view."),
            query("tab", "Profile tab."),
        ),
    ),
    Action(
        name="update_profile",
        method="POST",
        path="/profile/update",
        summary="Update the current user's profile",
        params=(
            body("bio", "Profile biography."),
            body("location", "Location."),
            body("git_link", "Git profile link."),
            body("website", "Personal website."),
        ),
    ),
    Action(
        name="regenerate_api_key",
        method="POST",
        path="/profile/regenerate-api-key",
        summary="Issue a new API key and invalidate the current one",
        description=(
            "Returns the new api_key. Warning: this immediately invalidates any key currently "
            "used for authentication, so confirm with the user before calling it."
        ),
        params=(
            body(
                "confirm",
                "Must be true, set only after the user has explicitly confirmed.",
                required=True,
            ),
        ),
    ),
    Action(
        name="give_award",
        method="POST",
        path="/profile/{username}/award",
        summary="Give another member an award on their profile",
        description=(
            "Creates a pending award row and enqueues image generation billed to the giver's "
            "API key. The receiver is notified when generation completes. Cannot award yourself; "
            "blocked pairs are rejected; cooldowns apply."
        ),
        params=(
            path("username", "Receiver username."),
            body("description", "Short award message (1-125 characters).", required=True),
        ),
    ),
    Action(
        name="regenerate_avatar",
        method="POST",
        path="/profile/{username}/regenerate-avatar",
        summary="Generate a new random avatar for a user",
        description=(
            "Replaces the user's avatar with a freshly generated random one and returns the new "
            "avatar_url. Owner-or-admin only. Irreversible: the previous avatar is gone for good, "
            "so confirm with the user before calling it."
        ),
        params=(
            path("username", "Username whose avatar to regenerate."),
            confirm(),
        ),
    ),
)
