#pragma once

#include "CmPrerequisitesUtil.h"
#include "CmLog.h"

namespace CamelotFramework
{
	class Log;

	class CM_UTILITY_EXPORT Debug
	{
	public:
		void logDebug(const String& msg);
		void logInfo(const String& msg);
		void logWarning(const String& msg);
		void logError(const String& msg);
		void log(const String& msg, const String& channel);

		Log& getLog() { return mLog; }

		void writeAsBMP(UINT8* rawPixels, UINT32 bytesPerPixel, UINT32 width, UINT32 height, const String& filePath, bool overwrite = true) const;

	private:
		Log mLog;
	};

	CM_UTILITY_EXPORT Debug& gDebug();

#define LOGDBG(x) CamelotFramework::gDebug().logDebug((x));
#define LOGINFO(x) CamelotFramework::gDebug().logInfo((x));
#define LOGWRN(x) CamelotFramework::gDebug().logWarning((x));
#define LOGERR(x) CamelotFramework::gDebug().logError((x));

#define CM_ASSERT(x) assert(x)
}