text: #pragma once
  
  #include "../JsonForward.h"
  
  enum class FrameStage;
  class GameEvent;
  struct ImDrawList;
  
  namespace Visuals
  {
      bool isThirdpersonOn() noexcept;
      bool isZoomOn() noexcept;
      bool isSmokeWireframe() noexcept;
      bool isDeagleSpinnerOn() noexcept;
      bool shouldRemoveFog() noexcept;
      bool shouldRemoveScopeOverlay() noexcept;
      bool shouldRemoveSmoke() noexcept;
      bool shouldRemoveZoom() noexcept;
      float viewModelFov() noexcept;
      float fov() noexcept;
      float farZ() noexcept;
  
      void performColorCorrection() noexcept;
      void inverseRagdollGravity() noexcept;
      void colorWorld() noexcept;
      void drawReloadProgress(ImDrawList* drawList) noexcept;
      void modifySmoke(FrameStage stage) noexcept;
      void thirdpersonDistance() noexcept;
      void thirdperson() noexcept;
      void removeVisualRecoil(FrameStage stage) noexcept;
      void removeBlur(FrameStage stage) noexcept;
      void updateBrightness() noexcept;
      void removeGrass(FrameStage stage) noexcept;
      void remove3dSky() noexcept;
      void removeShadows() noexcept;
      void applyZoom(FrameStage stage) noexcept;
      void applyScreenEffects() noexcept;
      void hitEffect(GameEvent* event = nullptr) noexcept;
      void hitMarker(GameEvent* event, ImDrawList* drawList = nullptr) noexcept;
      void disablePostProcessing(FrameStage stage) noexcept;
      void reduceFlashEffect() noexcept;
      bool removeHands(const char* modelName) noexcept;
      bool removeSleeves(const char* modelName) noexcept;
      bool removeWeapons(const char* modelName) noexcept;
      void skybox(FrameStage stage) noexcept;
      void bulletTracer(GameEvent& event) noexcept;
      void drawMolotovHull(ImDrawList* drawList) noexcept;
      void drawSmokeHull(ImDrawList* drawList) noexcept;
      void drawNadeBlast(ImDrawList* drawList) noexcept;
  
      inline constexpr std::array skyboxList{ "Default", "cs_baggage_skybox_", "cs_tibet", "embassy", "italy", "jungle", "nukeblank", "office", "sky_cs15_daylight01_hdr", "sky_cs15_daylight02_hdr", "sky_cs15_daylight03_hdr", "sky_cs15_daylight04_hdr", "sky_csgo_cloudy01", "sky_csgo_night_flat", "sky_csgo_night02", "sky_day02_05_hdr", "sky_day02_05", "sky_dust", "sky_l4d_rural02_ldr", "sky_venice", "vertigo_hdr", "vertigo", "vertigoblue_hdr", "vietnam", "sky_lunacy", "sky_hr_aztec" };
  
      void updateEventListeners(bool forceRemove = false) noexcept;
      void updateInput() noexcept;
  
      // GUI
      void menuBarItem() noexcept;
      void tabItem() noexcept;
      void drawGUI(bool contentOnly) noexcept;
      
      // Config
      json toJson() noexcept;
      void fromJson(const json& j) noexcept;
      void resetConfig() noexcept;
  }
  