/*++
Copyright (c) Microsoft Corporation
Licensed under the MIT license.

Module Name:
- globals.h

Abstract:
- This module contains the global variables used by the console server DLL.

Author:
- Jerry Shea (jerrysh) 21-Sep-1993

Revision History:
- Modified to reduce globals over Console V2 project (MiNiksa/PaulCam, 2014)
--*/

#pragma once

#include "selection.hpp"
#include "server.h"
#include "ConsoleArguments.hpp"
#include "ApiRoutines.h"

#include "..\renderer\inc\IRenderData.hpp"
#include "..\renderer\inc\IRenderEngine.hpp"
#include "..\renderer\inc\IRenderer.hpp"
#include "..\renderer\inc\IFontDefaultList.hpp"

#include "..\server\DeviceComm.h"

#include <TraceLoggingProvider.h>
#include <winmeta.h>
TRACELOGGING_DECLARE_PROVIDER(g_hConhostV2EventTraceProvider);

class Globals
{
public:
    UINT uiOEMCP = GetOEMCP();
    UINT uiWindowsCP = GetACP();
    HINSTANCE hInstance;
    UINT uiDialogBoxCount;

    ConsoleArguments launchArgs;

    CONSOLE_INFORMATION& getConsoleInformation();

    DeviceComm* pDeviceComm;

    wil::unique_event_nothrow hInputEvent;

    SHORT sVerticalScrollSize;
    SHORT sHorizontalScrollSize;

    int dpi = USER_DEFAULT_SCREEN_DPI;
    ULONG cursorPixelWidth = 1;

    NTSTATUS ntstatusConsoleInputInitStatus;
    wil::unique_event_nothrow consoleInputSetupEvent;
    wil::unique_event_nothrow consoleInputInitializedEvent;
    DWORD dwInputThreadId;

    std::vector<wchar_t> WordDelimiters;

    Microsoft::Console::Render::IRenderer* pRender;

    Microsoft::Console::Render::IFontDefaultList* pFontDefaultList;

    bool IsHeadless() const;

    ApiRoutines api;

private:
    CONSOLE_INFORMATION ciConsoleInformation;
};
