"""Rest command for restoring stamina."""

from mudlib.commands.movement import send_nearby_message
from mudlib.gmcp import send_char_status
from mudlib.player import Player


async def cmd_rest(player: Player, args: str) -> None:
    """Toggle resting state to restore stamina over time.

    Cannot rest if stamina is already full.
    Broadcasts to nearby players when beginning and ending rest.
    Stamina restoration happens via the game loop while resting.
    """
    # Check if stamina is already full
    if player.stamina >= player.max_stamina:
        await player.send("You're not tired.\r\n")
        return

    # Toggle resting state
    if player.resting:
        # Stop resting
        player.resting = False
        send_char_status(player)
        await player.send("You stop resting.\r\n")
        await send_nearby_message(
            player, player.x, player.y, f"{player.name} stops resting.\r\n"
        )
    else:
        # Start resting
        player.resting = True
        send_char_status(player)
        await player.send("You begin to rest.\r\n")
        await send_nearby_message(
            player, player.x, player.y, f"{player.name} begins to rest.\r\n"
        )
