# retoor <retoor@molodetz.nl>

from __future__ import annotations

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


ENGAGEMENT_ACTIONS: tuple[Action, ...] = (
    Action(
        name="vote",
        method="POST",
        path="/votes/{target_type}/{target_uid}",
        summary="Cast or toggle a vote on a target",
        description="Re-sending the same value removes the vote. Returns the net/up/down tally.",
        ajax=True,
        params=(
            path("target_type", TARGET_TYPE),
            path(
                "target_uid",
                "Uid of the target, copied from a listing response; do not invent it.",
            ),
            body(
                "value",
                "Vote value: 1 to upvote, -1 to downvote (re-send to remove).",
                required=True,
            ),
        ),
    ),
    Action(
        name="react",
        method="POST",
        path="/reactions/{target_type}/{target_uid}",
        summary="Toggle an emoji reaction on a target",
        description="Re-sending the same emoji removes it. Returns reaction counts.",
        ajax=True,
        params=(
            path("target_type", TARGET_TYPE),
            path(
                "target_uid",
                "Uid of the target, copied from a listing response; do not invent it.",
            ),
            body("emoji", "Any single emoji character, for example \U0001F984.", required=True),
        ),
    ),
    Action(
        name="list_bookmarks",
        method="GET",
        path="/bookmarks/saved",
        summary="List saved bookmarks",
        params=(query("before", "Pagination cursor."),),
    ),
    Action(
        name="toggle_bookmark",
        method="POST",
        path="/bookmarks/{target_type}/{target_uid}",
        summary="Toggle a bookmark on a target",
        description="Re-sending removes the bookmark. Returns {saved: true|false}.",
        ajax=True,
        params=(
            path("target_type", TARGET_TYPE),
            path(
                "target_uid",
                "Uid of the target, copied from a listing response; do not invent it.",
            ),
        ),
    ),
    Action(
        name="vote_poll",
        method="POST",
        path="/polls/{poll_uid}/vote",
        summary="Vote in a poll",
        description="Casts or changes your vote on a poll option. Returns the option tallies.",
        ajax=True,
        params=(
            path("poll_uid", "Poll uid."),
            body("option_uid", "Chosen option uid.", required=True),
        ),
    ),
)
