#pragma once

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

////////////////////////////////////////////////////////////////////////////////////
//	Application Interface

#include "ICoreSystemCollection.h"

namespace ApplicationFramework {

class IWindowSystem;
class IUiSystem;
class IRenderSystem;
class IWindowRenderSurfaceSystem;

class IApplication : public CoreSystemCollection
{
public:
    virtual void MainLoop() = 0;

    virtual IWindowSystem* WindowSystem() const = 0;
    virtual IUiSystem* UiSystem() const = 0;
    virtual IRenderSystem* RenderSystem() const = 0;
    virtual IWindowRenderSurfaceSystem* WindowRenderSurfaceSystem() const = 0;
};

} // ApplicationFramework namespace
