<?php

// Run configuration
define('LOG_WRITE_CURRENT_FILE', 'ManiaControl.log'); // Write current log to extra file in base dir
define('LOG_NAME_USE_DATE', true); // Use current date as suffix for log file name in logs folder
define('LOG_NAME_USE_PID', true); // Use current process id as suffix for log file name in logs folder
                                  
// Define base dir
define('ManiaControlDir', __DIR__);

// Define fatal error level
define('E_FATAL', E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_RECOVERABLE_ERROR | E_USER_ERROR);

// Set process settings
ini_set('memory_limit', '64M');
if (function_exists('date_default_timezone_get') && function_exists('date_default_timezone_set')) {
	date_default_timezone_set(@date_default_timezone_get());
}

// Build log file name
$logFileName = ManiaControlDir . '/logs/';
if (!is_dir($logFileName)) {
	mkdir($logFileName);
}
$logFileName .= 'ManiaControl';
if (LOG_NAME_USE_DATE) {
	$logFileName .= '_' . date('Y-m-d');
}
if (LOG_NAME_USE_PID) {
	$logFileName .= '_' . getmypid();
}
$logFileName .= '.log';
define('LOG_FILE', $logFileName);

// Delete old current log file
if (LOG_WRITE_CURRENT_FILE) {
	$currentLogFileName = ManiaControlDir . '/' . LOG_WRITE_CURRENT_FILE;
	if (file_exists($currentLogFileName) && is_writable($currentLogFileName)) {
		unlink($currentLogFileName);
	}
	define('LOG_CURRENT_FILE', $currentLogFileName);
}

logMessage('Starting ManiaControl ...');

/**
 * Checking if all the needed libraries are installed.
 * - MySQLi
 * - cURL
 */
logMessage('Checking for installed MySQLi ... ', false);
if (extension_loaded('mysqli')) {
	logMessage('FOUND!');
}
else {
	logMessage('NOT FOUND!');
	logMessage(' -- You don\'t have MySQLi installed, make sure to check: http://www.php.net/manual/en/mysqli.installation.php');
	exit();
}

logMessage('Checking for installed cURL   ... ', false);
if (extension_loaded('curl')) {
	logMessage('FOUND!');
}
else {
	logMessage('NOT FOUND!');
	logMessage('You don\'t have cURL installed, make sure to check: http://www.php.net/manual/en/curl.installation.php');
	exit();
}

/**
 * Log and echo the given text
 * 
 * @param string $message
 */
function logMessage($message, $eol = true) {
	$date = date("d.M y H:i:s");
	$message = $date . ' ' . $message;
	if ($eol) {
		$message .= PHP_EOL;
	}
	if (defined('LOG_CURRENT_FILE')) {
		if (!file_put_contents(LOG_CURRENT_FILE, $message, FILE_APPEND)) {
			echo "Logfile not Write-able, please check your file Permissions";
		}
	}
	if (!file_put_contents(LOG_FILE, $message, FILE_APPEND)) {
		echo "Logfile not Write-able, please check your file Permissions";
	}
	echo $message;
}

// Autoload Function that loads ManiaControl Class Files on Demand
spl_autoload_register(function ($className) {
	$classPath = str_replace('\\', DIRECTORY_SEPARATOR, $className);
	
	// Core file
	$classDirectoryPath = preg_replace('/ManiaControl/', 'core', $classPath, 1);
	$filePath = ManiaControlDir . DIRECTORY_SEPARATOR . $classDirectoryPath . '.php';
	if (file_exists($filePath)) {
		require_once $filePath;
		return;
	}
	
	// Plugin file
	$filePath = ManiaControlDir . DIRECTORY_SEPARATOR . 'plugins/' . $classPath . '.php';
	if (file_exists($filePath)) {
		require_once $filePath;
		return;
	}
});

// Start ManiaControl
$maniaControl = new \ManiaControl\ManiaControl();
$maniaControl->run();