#pragma once

#include <memory>

#include "Event.h"

struct Command;

// UI fan-in for the command path: widgets emit this with a built command, and a
// single subscriber (GameWorldView) enqueues it onto the CommandManager. This
// keeps widgets decoupled (consistent with the rest of the UI), while the
// sim-mutating command itself is routed through the dedicated CommandManager
// queue rather than the EventManager bus (see docs/replay_design.md).
class CommandRequestedEvent : public Event
{
public:
    explicit CommandRequestedEvent(std::shared_ptr<const Command> command)
        : command(std::move(command))
    {
    }

    const std::shared_ptr<const Command> command;
};
