text: #pragma once
  #include "windowProperties.h"
  #include "../Event System/eventManager.h"
  
  namespace RedSunlight
  {
  	class Window
  	{
  	public:
  		explicit Window(WindowProperties properties);
  		Window(const Window&) = delete;
  		Window(Window&&) noexcept;
  		~Window();
  
  		Window& operator=(const Window&) = delete;
  		Window& operator=(Window&&) noexcept;
  
  		void clearToColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 255);
  		void clearToColorf(float r, float g, float b, float a = 1.0f);
  		void displayContent() const;
  
  		void attachEventManager(EventManager& manager);
  
  		void windowCloseCallback(bool shouldCloseWindow);
  		void keyCallback(int key, int scancode, int action, int mods);
  		void mouseButtonCallback(int button, int action, int mods);
  		void cursorPositionCallback(double x, double y);
  
  	private:
  		void initOpenGL();
  
  		void createGLFWWindow();
  		void createWindowedWindow();
  		void createFullscreenWindow();
  		void createFullscreenWindowedWindow();
  
  		void centerWindow() const;
  
  		WindowProperties properties;
  		GLFWwindow* window{};
  		EventManager* eventManager{};
  	};
  }