//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: log.hpp
//      Краткое описание: лог приложения
//

#ifndef DSE_KERNEL_LOG_LOG_HPP
#define DSE_KERNEL_LOG_LOG_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Kernel/Misc/singleton.hpp>

namespace ker
{
#define lerr Log::ptr()->writeError(__FILE__, __LINE__, __FUNCTION__)
#define lmes Log::ptr()->writeMessage(__FILE__, __LINE__, __FUNCTION__)	
#define lwar Log::ptr()->writeWarning(__FILE__, __LINE__, __FUNCTION__)

	class Log : public SingletonHolder<Log>
	{
	private:
		std::ofstream log;

		unsigned int warnings;
		unsigned int errors;

		bool to_console;
	public:
		Log();
		~Log();

		Log& writeMessage(const std::string& file, const unsigned int line, const std::string& func);
		Log& writeError(const std::string& file, const unsigned int line, const std::string& func);
		Log& writeWarning(const std::string& file, const unsigned int line, const std::string& func);

		void open(const std::string& filename);
		void close();

		const char* getFileName(const std::string& file);

		template <typename T> Log& operator <<(const T& t);

		bool getIsToConsole();
		void setIsToConsole(const bool is_true);
	};
};

#include <Darkstar/Kernel/Log/log.inl>

#endif