#pragma once
#include <sstream>
#include "../include/Gobbledegook.h"
namespace ggk {
#define SSTR std::ostringstream().flush()
class Logger
{
public:
static void registerDebugReceiver(GGKLogReceiver receiver);
static void registerInfoReceiver(GGKLogReceiver receiver);
static void registerStatusReceiver(GGKLogReceiver receiver);
static void registerWarnReceiver(GGKLogReceiver receiver);
static void registerErrorReceiver(GGKLogReceiver receiver);
static void registerFatalReceiver(GGKLogReceiver receiver);
static void registerAlwaysReceiver(GGKLogReceiver receiver);
static void registerTraceReceiver(GGKLogReceiver receiver);
static void debug(const char *pText);
static void debug(const std::string &text);
static void debug(const std::ostream &text);
static void info(const char *pText);
static void info(const std::string &text);
static void info(const std::ostream &text);
static void status(const char *pText);
static void status(const std::string &text);
static void status(const std::ostream &text);
static void warn(const char *pText);
static void warn(const std::string &text);
static void warn(const std::ostream &text);
static void error(const char *pText);
static void error(const std::string &text);
static void error(const std::ostream &text);
static void fatal(const char *pText);
static void fatal(const std::string &text);
static void fatal(const std::ostream &text);
static void always(const char *pText);
static void always(const std::string &text);
static void always(const std::ostream &text);
static void trace(const char *pText);
static void trace(const std::string &text);
static void trace(const std::ostream &text);
private:
static GGKLogReceiver logReceiverDebug;
static GGKLogReceiver logReceiverInfo;
static GGKLogReceiver logReceiverStatus;
static GGKLogReceiver logReceiverWarn;
static GGKLogReceiver logReceiverError;
static GGKLogReceiver logReceiverFatal;
static GGKLogReceiver logReceiverAlways;
static GGKLogReceiver logReceiverTrace;
};
};