module.exports = {
	ReadFile: ReadFile,
	WriteFile: WriteFile,
	writeFileAsync: WriteFileAsync,
	AppendToFile: AppendToFile,
	Beep: Beep,
	WriteBackup: WriteBackup,
	FileExists: FileExists,
	CreatePath: CreatePath,
	GetAllFilesFromFolder: GetAllFilesFromFolder
};

var fs = require('fs');

var logger = require('./logger.js');

const recievedFile = "stats/recieved";
const manFile = "public/man.html";
const logFile = "stats/logs";
const dataFile = "public/data.json";

function ReadFile(name) {
	if (!FileExists(name))
		throw "No such file: " + name;
	return fs.readFileSync(name, "utf8");
}

function FileExists(path) {
	return fs.existsSync(path);
}

function CreatePath(path, onlyPath) {
	if (FileExists(path))
		return;

	var p = path.split("/");
	var currDir = p[0];
	for (var i = 1; i < p.length; i++) {
		if (currDir != "" && !fs.existsSync(currDir)) {
			try {
				fs.mkdirSync(currDir);
			} catch (e) { console.log("Failed to make " + currDir + " directory... "); }
		}
		currDir += "/" + p[i];
	}
	if (onlyPath == undefined || onlyPath == false)
		fs.writeFileSync(path, "");
	else
		fs.mkdirSync(path);

}

function WriteFile(content, path) {
	CreatePath(path);
	fs.writeFileSync(path, content);
}

function WriteFileAsync(content, path) {
	CreatePath(path);
	fs.writeFile(path, content, function(err) {
		if (err) {
			logger.Log("Error writing file: " + path + " (sync)", logger.GetColor("redbg"));
		}
	});
}

function AppendToFile(data, file) {
	CreatePath(file);
	fs.appendFile(file, "\n" + data, function(err) {
		if (err)
			logger.Log("Error writing log file: " + file + " (sync)", logger.GetColor("redbg"));
	});
}

function Beep() {
	try {
		process.stdout.write('\x07');
	} catch (e) {
		console.log("error beepin");
	}
}

function WriteBackup() {
	try {
		WriteFileAsync(ReadFile(dataFile), 'public/backs/data_' + new Date().toString());
	} catch (e) {
		logger.Log("Error backing up data json file!", logger.GetColor("redbg"));
		console.log(e);
	}
}

function GetAllFilesFromFolder(dir) {

	var results = [];

	fs.readdirSync(dir).forEach(function(file) {

		file = dir + '/' + file;
		var stat = fs.statSync(file);

		if (stat && stat.isDirectory()) {
			results = results.concat(_getAllFilesFromFolder(file));
		} else results.push(file);

	});

	return results;
}