/* ----------------------------------------------------------------------------    

 Question Server
 GitLab: <https://gitlab.com/YourFriendlyNeighborhoodDealer/question-node-server>

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program. If not, see <https://www.gnu.org/licenses/>.

 ------------------------------------------------------------------------- */

module.exports = {
	GetDateString: GetDateString,
	Log: Log,
	GetColor: GetColor,
	LogReq: LogReq
};

const DELIM = "|";

var utils = require('./utils.js');
const nlogFile = "stats/nlogs";
const logFile = "/nlogs/nlogs";
const locLogFile = "stats/logs";
const allLogFile = "/nlogs/log";

function GetDateString() {
	var m = new Date();
	return m.getFullYear() + "/" +
		("0" + (m.getMonth() + 1)).slice(-2) + "/" +
		("0" + m.getDate()).slice(-2) + " " +
		("0" + m.getHours()).slice(-2) + ":" +
		("0" + m.getMinutes()).slice(-2) + ":" +
		("0" + m.getSeconds()).slice(-2);
}

function Log(s, c, b) {
	if (c != undefined)
		console.log(c, GetDateString() + DELIM + s);
	else
		console.log(GetDateString() + DELIM + s);

	if (b)
		utils.Beep();

	utils.AppendToFile(GetDateString() + DELIM + s, nlogFile);
	utils.AppendToFile(GetDateString() + DELIM + s, logFile);
}

function LogReq(req, toFile, sc) {
	try {
		var ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress;
		var logEntry = ip + DELIM + req.hostname + DELIM + req.headers['user-agent'] +
			DELIM + req.method + DELIM;

		logEntry += req.url;

		if (sc != undefined && sc == 404)
			logEntry += DELIM + sc;
		var color = GetColor("green");

		if (req.url.toLowerCase().includes("isadding"))
			color = GetColor("yellow");
		if (!toFile) {
			Log(logEntry, color);
		} else {
			var defLogs = GetDateString() + DELIM + logEntry;
			var extraLogs = "\n\t" + JSON.stringify(req.headers) + "\n\t" + JSON.stringify(req.body) + "\n";

			utils.AppendToFile(defLogs, locLogFile);
			utils.AppendToFile(defLogs, allLogFile);
		}

	} catch (e) {
		console.log(e);
		Log("Error at logging lol", GetColor("redbg"), true);
	}
}

function GetColor(c) {
	if (c == "redbg")
		return '\x1b[41m%s\x1b[0m';
	if (c == "bluebg")
		return '\x1b[44m%s\x1b[0m';
	if (c == "red")
		return '\x1b[31m%s\x1b[0m';
	if (c == "green")
		return '\x1b[32m%s\x1b[0m';
	if (c == "yellow")
		return '\x1b[33m%s\x1b[0m';
	if (c == "blue")
		return '\x1b[34m%s\x1b[0m';
	if (c == "cyan")
		return '\x1b[36m%s\x1b[0m';
}