<?php

function getUserInput(string $label): string
{
	echo $label;

	return str_replace("\n", '', fgets(STDIN));
}

const TEMPLATE_SETTINGS = '<?php

/*
 * This file was auto generated on :DATETIME
 */
 
declare(strict_types=1);

final class Setting
{
	public const MYSQL_HOST = \':HOST\';
	public const MYSQL_USER = \':USER\';
	public const MYSQL_PASSWORD = \':PASSWORD\';
	public const MYSQL_DATABASE = \':DATABASE\';

	public const PATH_ROOT = \':ROOT_PATH/\';
	public const PATH_QR_CODES = self::PATH_ROOT . \'backend/qr/\';
	public const PATH_TMP = self::PATH_ROOT . \'backend/tmp/\';
}
';

echo 'Let\'s setup the database. Please enter the informations for your database...' . PHP_EOL;

$hostname = getUserInput('MySQL host address: ');
$username = getUserInput('MySQL user: ');
$password = getUserInput('MySQL password (shown!): ');
$database = getUserInput('MySQL database: ');

$settings = str_replace(
	[':HOST', ':USER', ':PASSWORD', ':DATABASE', ':ROOT_PATH', ':DATETIME'],
	[$hostname, $username, $password, $database, getcwd(), (new DateTime())->format('Y-m-d H:i:s')],
	TEMPLATE_SETTINGS
);

require 'backend/classes/core/Autoloader.php';

if (!is_dir(Autoloader::PATH_CACHE)) {
	mkdir(Autoloader::PATH_CACHE);
}

$file = fopen(getcwd() . '/backend/classes/Setting.php', 'w');
fwrite($file, $settings);
fclose($file);

Autoloader::BuildCache();

$autoloader = new Autoloader();

$file = fopen('backend/scripts/setup.sql', 'r');
$setupSql = fread($file, filesize('backend/scripts/setup.sql'));
fclose($file);

$db = new MySqlDatabase($hostname, $username, $password, $database);

$db->startTransaction();

$db->Query(str_replace('$DB_NAME', $database, $setupSql));

echo 'Let\'s create an admin account...'  . PHP_EOL;

$user = new User(null, $db);

$user->setUsername(getUserInput('Username: '));
$user->setPassword(getUserInput('Password: '));
$user->setEmail(getUserInput('Email: '));
$user->setJabberAddress(getUserInput('Jabber address: '));
$user->setAdmin(true);
$user->Save();

$db->commit();

echo 'Ringfinger setup has successfully finished.' . PHP_EOL;