#pragma once

#include "Window.h"

#include "Win32WindowInterface.h"
#include "AbstractUiInterface.h"

class DesktopManager;

class DirectXInterface;
using DirectXInterfacePtr = std::unique_ptr<DirectXInterface>;

class Win32UIInterface : public AbstractUIInterface
{
public:
    Win32UIInterface(DesktopManager* desktopManager, bool useHardware = false);

    ~Win32UIInterface() = default;

    void addWindow(mt::Window* window) override;

    void initialize() override;

    void loop() override;

    void shutDown() override;

    void showWindow(mt::Window* window) override;

private:
    void initializeHardwareRendering() override;
    Win32WindowInterfacePtr mWindowInterface;
    DirectXInterfacePtr mDxInterface;
};