text: ﻿#pragma once
  
  #include <memory>
  
  namespace Hydra::Debug
  {
  
      class DebugConsole
      {
      public:
          DebugConsole();
          ~DebugConsole();
  
          void Initialize() const
          {
              ENGINE_DEBUG(InitializeImpl());
          }
          
          void Show() const
          {
              ENGINE_DEBUG(ShowImpl());
          }
          
          void Hide() const
          {
              ENGINE_DEBUG(HideImpl());
          }
          
          void Cleanup() const
          {
              ENGINE_DEBUG(CleanupImpl());
          }
  
          void SetTitle(const std::string& title)
          {
              ENGINE_DEBUG(SetTitleImpl(title));
          }
          
          static std::shared_ptr<DebugConsole> Get() { return s_Instance == nullptr ? (s_Instance = std::make_shared<DebugConsole>()) : s_Instance; }
  
      private:
          void InitializeImpl() const;
          void ShowImpl() const;
          void HideImpl() const;
          void CleanupImpl() const;
          void SetTitleImpl(const std::string& title);
          
          inline static std::shared_ptr<DebugConsole> s_Instance = nullptr;
  
      private:
          std::string m_Title;
          
      };
      
  }
  