#pragma once

#include <memory>

namespace mt
{
    class Window;
}

class DesktopManager;

class AbstractUIInterface
{
public:

    AbstractUIInterface(DesktopManager* desktopManager, bool useHardware = false)
        : mDesktopManager(desktopManager),
          mUseHardwareRendering(useHardware)
    {
    }

    virtual ~AbstractUIInterface() = default;

    virtual void loop() = 0;

    virtual void showWindow(mt::Window* window) = 0;

    virtual void addWindow(mt::Window* window) = 0;

protected:
    virtual void initialize() = 0;
    virtual void shutDown() = 0;

    virtual void initializeHardwareRendering() {};

    DesktopManager* mDesktopManager{nullptr};
    bool mUseHardwareRendering{false};
};
