#pragma once

#include <Core/Common/NonNullPtr.h>
#include <Core/HAL/Display/Window.h>
#include <Core/HAL/Win32.h>

namespace Juliet
{
    struct DisplayDevice;
    struct Window;
} // namespace Juliet

namespace Juliet::Win32
{
    // TODO : Evaluate if its worth the burden of casting to Window32State all the time
    struct Window32State : WindowState
    {
        HWND Handle;
        HDC  HDC;

        bool IsMouseTracked : 1;
    };

    extern bool CreatePlatformWindow(NonNullPtr<DisplayDevice> self, NonNullPtr<Window> window);
    extern void DestroyPlatformWindow(NonNullPtr<DisplayDevice> self, NonNullPtr<Window> window);
    extern void ShowWindow(NonNullPtr<DisplayDevice> self, NonNullPtr<Window> window);
    extern void HideWindow(NonNullPtr<DisplayDevice> self, NonNullPtr<Window> window);
    extern void SetWindowTitle(NonNullPtr<DisplayDevice> self, NonNullPtr<Window> window, String title);
} // namespace Juliet::Win32
