#pragma once

#include "debug/DebugWindowRegistry.hpp"
#include "debug/metrics/NetworkMetrics.hpp"
#include "draw/WorldRenderer.hpp"
#include "io/InputState.hpp"
#include "world/JoltPhysicsWorld.hpp"
#include "world/World.hpp"

namespace tw::app {

/**
 * Bundle of runtime-owned subsystems that the game state needs.
 */
struct GameContext {
    tw::World* world;
    tw::JoltPhysicsWorld* physics_world;
    tw::drw::WorldRenderer* renderer;
    tw::io::InputManager* input_manager;
    tw::dbg::NetworkMetrics* metrics;
    tw::dbg::DebugWindowRegistry* debug_windows;
};

} // namespace tw::app
