#include <VoxelverseSession/VoxelverseSession.hpp>
#include <DevCommand/DevCommand.hpp>
#include <string>
#include <unordered_map>

class VoxelverseDevTool : public VoxelverseSession
{
private:
    std::unordered_map<std::string, std::unique_ptr<DevCommand>> commands;

    template<typename TCommand>
    void registerCommand(const std::string &name)
    {
        commands[name] = std::make_unique<TCommand>();
    }

public:
    VoxelverseDevTool();

    virtual int run() override;
    virtual std::string getSessionTypeName() override;
};