#ifndef ISYSTEM_H
#define ISYSTEM_H

#ifdef _WIN32
#pragma once
#endif

#include "interface.h"
#include "VGUI.h"
#include "KeyCode.h"

#ifdef PlaySound
#undef PlaySound
#endif

class KeyValues;

namespace vgui
{

	class ISystem : public IBaseInterface
	{
	public:
		virtual void Shutdown() = 0;

		virtual void RunFrame() = 0;

		virtual void ShellExecute(const char* command, const char* file) = 0;

		virtual double GetFrameTime() = 0;

		virtual double GetCurrentTime() = 0;

		virtual long GetTimeMillis() = 0;

		virtual int GetClipboardTextCount() = 0;
		virtual void SetClipboardText(const char* text, int textLen) = 0;
		virtual void SetClipboardText(const wchar_t* text, int textLen) = 0;
		virtual int GetClipboardText(int offset, char* buf, int bufLen) = 0;
		virtual int GetClipboardText(int offset, wchar_t* buf, int bufLen) = 0;

		virtual bool SetRegistryString(const char* key, const char* value) = 0;
		virtual bool GetRegistryString(const char* key, char* value, int valueLen) = 0;
		virtual bool SetRegistryInteger(const char* key, int value) = 0;
		virtual bool GetRegistryInteger(const char* key, int& value) = 0;

		virtual KeyValues* GetUserConfigFileData(const char* dialogName, int dialogID) = 0;
		virtual void SetUserConfigFile(const char* fileName, const char* pathName) = 0;
		virtual void SaveUserConfigFile() = 0;

		virtual bool SetWatchForComputerUse(bool state) = 0;
		virtual double GetTimeSinceLastUse() = 0;

		virtual int GetAvailableDrives(char* buf, int bufLen) = 0;

		virtual bool CommandLineParamExists(const char* paramName) = 0;

		virtual const char* GetFullCommandLine() = 0;

		virtual KeyCode KeyCode_VirtualKeyToVGUI(int keyCode) = 0;

		virtual bool GetCurrentTimeAndDate(int* year, int* month, int* dayOfWeek, int* day, int* hour, int* minute, int* second) = 0;

		virtual double GetFreeDiskSpace(const char* path) = 0;

		virtual bool CreateShortcut(const char* linkFileName, const char* targetPath, const char* arguments, const char* workingDirectory, const char* iconFile) = 0;
		virtual bool GetShortcutTarget(const char* linkFileName, char* targetPath, char* arguments, int destBufferSizes) = 0;
		virtual bool ModifyShortcutTarget(const char* linkFileName, const char* targetPath, const char* arguments, const char* workingDirectory) = 0;

		virtual bool GetCommandLineParamValue(const char* paramName, char* value, int valueBufferSize) = 0;

		virtual bool DeleteRegistryKey(const char* keyName) = 0;

		virtual const char* GetDesktopFolderPath() = 0;

		virtual void ShellExecuteEx(const char* command, const char* file, const char* pParams) = 0;

		virtual void SetClipboardImage(void* pWnd, int x1, int y1, int x2, int y2) = 0;
	};

}

#define VGUI_SYSTEM_INTERFACE_VERSION "VGUI_System010"


#endif  