#pragma once
#include <string>
#include <fstream>
#include "cJSON.h"

using namespace std;
typedef enum {
	Trace_Level_Off = 0,
	Trace_Level_Logger = 1,
	Trace_Level_Error = 2,
	Trace_Level_Warn = 3,
	Trace_Level_Info = 4,
	Trace_Level_Debug = 5,
}Trace_Level_t;

class Tracer {
public:
	Tracer();
	~Tracer();
	static void setConsoleColor(int color);
	static bool json(string tag, cJSON* root);
	static void error(string tag, string msg);
	static void warn(string tag, string msg);
	static void info(string tag, string msg);
	static void debug(string tag, string msg);
	static void logger(string tag, string msg, string level="[logger]");
	static void hex(string tag, unsigned char* msg, int len);

	static int getTraceLevel();

	static int setTraceLevel(int v);

private:
	static Trace_Level_t traceLevel;
	static string currentTimestamp();

	static void saveLogger(string levelString, string tag, string msg);
	static void append2Console(string levelString, string tag, string msg);
	static void append2File(string levelString, string tag, string msg);
};
