#include <memory>

#include "GL/glew.h"
#include "SDL2/SDL.h"
#include "SDL2/SDL_opengl.h"
// #include "SDL2/SDL_vulkan.h"

#include "Logger.hh"
#include "Controller.hh"


using namespace Core;

namespace App
{
    class App
    {
    private:
        std::shared_ptr<Logger>             m_Logger;
        std::shared_ptr<Controller>         m_Controller;
        int                                 m_ReturnCode;
        int                                 m_WindowWidth;
        int                                 m_WindowHeight;
        SDL_Window*                         m_Window;
        SDL_GLContext                       m_glContext;
        bool                                m_Quit;
        bool                                m_VSync;
        GLuint                              m_vbo;
        GLuint                              m_vao;
        GLuint                              m_prog;
    public:
        App(/* args */);
        int getReturnCode() const;
        void handleCommand(const Uint32 command);
        const void PrintSystemInfo() const;
        ~App();
    };
} // namespace App
