/* EXCEPTIONS ... int value. Constructor must be in the try block.
 *
 *	10 : in FileLogger::FileLogger() can't open/create log.txt (Permission denied)
 *	11 : in FileLogger::FileLogger(const char* OutputFile) can't open/create log file (Permission denied)
 */

#include "Logger.h"
using namespace std;


/*
 *Print messages on standart output
 */
void ConsoleLogger::Log(const string message) {

	cout << getTime() << " -- " << message << endl;
}

/*
 * Returns a time value in string 
 */
const string Logger::getTime() {

	time_t rawtime;
	struct tm * timeinfo;

	time(&rawtime);
	timeinfo = localtime(&rawtime);
	string time = asctime(timeinfo);
	time.erase(time.begin(),time.begin()+4);
	time.erase(time.end()-6,time.end());

	return time;
}


/*
 *Constructor. Default log file (log.txt)
 */
FileLogger::FileLogger() {

	logfile.open("log.txt",fstream::app);
	if (!logfile.is_open()) {

		cerr    << "ERROR: in FileLogger::FileLogger() "
			<< "can't open/create log.txt (Permission denied)\n";
		throw 10;
	}
}


/*
 *Constructor with a specific log file
 */
FileLogger::FileLogger(const char* OutputFile) {

	logfile.open(OutputFile,fstream::app);
	if (!logfile.is_open()) {

		cerr	<< "ERROR: in FileLogger::FileLogger(const char* OutputFile) "
			<< "can't open/create log file (Permission denied)\n";
		throw 11;
	}
}


/*
 *Destructor. 
 */
FileLogger::~FileLogger() {

	if (logfile.is_open()) logfile.close();
}


/*
 *Log messages in the file
 */
void FileLogger::Log(const string message) {

	logfile << getTime() << " -- " << message << endl;	
}