#ifndef CIVSYSLOG_H
#define CIVSYSLOG_H

#include <string>
#include<iostream>
#include<fstream>
#include "pandaLog.h"

/**
    日志记录接口
*/
class PANDALOG_API  CivSysLog {

private:
	CivSysLog();

	// 记录日志级别
	enum LogLevel
	{
		Error,
		Warning,
		Info
	};
	// 静态实例化接口
	static CivSysLog* mInstance;
	std::string getLogPath();

public:
	static CivSysLog* getInstance();

	/**
	* @brief 错误记录
	* @param text  日志内容
	* @param handler  操作类
	* @param methodName  操作方法
	*/
	void error(std::string text, std::string handler, std::string methodName);

	/**
	* @brief debug级别信息
	* @param text  日志内容
	* @param handler  操作类
	* @param methodName  操作方法
	*/
	void debug(std::string text, std::string handler, std::string methodName);

	/**
	* @brief 一般操作信息信息
	* @param text  日志内容
	* @param handler  操作类
	* @param methodName  调用的操作方法
	*/
	void info(std::string text, std::string handler, std::string methodName);

	/**
	* @brief 警告级别
	* @param text  日志内容
	* @param handler  操作类
	* @param methodName  调用的操作方法
	*/
	void warning(std::string text, std::string handler, std::string methodName);

private:
	// 获取当前时间
	std::string getCurrentTime();
	std::string getCurrentTime2();
	void setLog(const std::string& logName);

	std::string log();

	// 写入日志
	void writeMesssage(std::string text, std::string handler, std::string methodName, std::string loglevel);

	// 日志文件名
	std::string mLogName;
	std::ofstream mOutfile;

public:
	class SafeClass {
	public:
		~SafeClass() {
			if (mInstance != nullptr) {
				delete mInstance;
				mInstance = nullptr;
			}
		}
	};
	static  SafeClass  safeClass;
};

#endif // !CIVSYSLOG_H
