#include "AppServer.h"
#include <iostream>
#include <fstream>
#include <Zeit.h>
#include <Datei.h>
#include <Text.h>
#include <Globals.h>
#include <sys/resource.h>

int main()
{
	struct rlimit core_limits;
	core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
	setrlimit(RLIMIT_CORE, &core_limits);

	Framework::initFramework();
    //if( chdir( "/test/app" ) == -1 )
    //    return -1;
	Zeit *z = getZeit();
	Text *pfad = new Text( "../log/app/" );
	pfad->append( z->getZeit( "y-m-d h-i-s.log" ) );
	z->release();
	DateiPfadErstellen( pfad->getThis() );
	std::ofstream file;
	file.open( pfad->getText() );
	std::streambuf* sbuf = std::cout.rdbuf();
	std::cout.rdbuf( file.rdbuf() );
	pfad->release();

	std::cout << "AppS: Startet...\n";
	std::cout << "AppS: Lese init Datei ../data/apsInit.ini ...\n";

	InitDatei *dat = new InitDatei( "../data/apsInit.ini" );
	if( !dat->laden() )
	{
		std::cout << "AppS: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
		dat->release();
		exit( 1 );
	}
	const char *wichtig[] = { "ServerId", "DBBenutzer", "DBPasswort", "DBName", "DBIP", "DBPort", "PHP", "AccountActivationMail", "Aktiv", "SSLCert", "SSLKey", "SSLPasswort" };
	for( const char *w : wichtig )
	{
		if( !dat->wertExistiert( w ) )
		{
			std::cout << "AppS: error: Der Wert '" << w << "' wurde nicht gefunden. Das Programm wird geschlossen.\n";
			dat->release();
			exit( 1 );
		}
	}

	AppServer *appServer = new AppServer( dat );

	std::cout << "AppS: Der Admin Server läuft. Startforgang beendet.\n";
	appServer->runn();

	appServer->ende();
	appServer->release();
	dat->release();
	std::cout << "AppS: Der Server ist heruntergefahren.\n";
	file.close();
	std::cout.rdbuf( sbuf );
	Framework::releaseFramework();
	return 0;
}