#pragma once

/*
	ApplicationFramework
	by John Ryland
	Copyright (c) 2023
*/

////////////////////////////////////////////////////////////////////////////////////
//	Application

#include "IApplication.h"
#include <vector>

namespace ApplicationFramework {

class Application : public IApplication
{
public:
    Application();

    void MainLoop() override;

    IWindowSystem*               WindowSystem() const override              { return m_windowSystem; }
    IUiSystem*                   UiSystem() const override                  { return m_uiSystem; }
    IRenderSystem*               RenderSystem() const override              { return m_renderSystem; }
    IWindowRenderSurfaceSystem*  WindowRenderSurfaceSystem() const override { return m_windowRenderSurfaceSystem; }

private:
    IWindowSystem*               m_windowSystem;
    IUiSystem*                   m_uiSystem;
    IRenderSystem*               m_renderSystem;
    IWindowRenderSurfaceSystem*  m_windowRenderSurfaceSystem;
};

} // ApplicationFramework namespace
