#pragma once

#include "GLFW/glfw3.h"
#include "Types.hpp"
#include "interfaces/IWindow.hpp"
#include "interfaces/IRenderingBackend.hpp"
#include "enums/WindowType.hpp"
#include "Color.hpp"

namespace TSE::GLFW
{
    class WindowGlfw : public IWindow
    {
        private:
        IRenderingBackend* renderingBackend;
        
        public:
        GLFWwindow* window;
        WindowType windowType;
        bool useImGui = false;
        
        WindowGlfw(string _title, int _width, int _height, IRenderingBackend* backend);
        WindowGlfw(string _title, int _width, int _height, IRenderingBackend* backend, TSE::WindowType type);
        WindowGlfw(string _title, int _width, int _height, IRenderingBackend* backend, TSE::WindowType type, int ppu);
        ~WindowGlfw();

        protected:
        bool Init() override;
        static void ResizeWindow(GLFWwindow* wnd, int width, int height);

        public:
        void Clear() const override;
        void Update() override;
        void ClearDepthBuffer() const override;
        bool ShouldClose() const override;
        inline void Bind() override { };
        inline void Unbind() override { };
        void DoneSetup() override;
    };
} // namespace TSE::GLFW
