#include "mainwindow.h"
#include "tools.h"
#include "password.h"

using namespace std;

#define READ   0
#define WRITE  1

extern QMap<int, QString> rsyncErrorStrings;
extern QApplication a;

// test return code of rsync
// return true in case of error
bool testRsyncReturn(MainWindow * w, QProcess * myProcess)
{
	info(DEBUGMACRO, "testRsyncReturn()");
	info(DEBUGMACRO, "Exit status: " + QString::number(myProcess->exitStatus()));
	info(DEBUGMACRO, "Exit code: " + QString::number(myProcess->exitCode()));

	if (myProcess->exitStatus() != 0 and w->stopDlAsked != true)
	{
		info(DEBUGMACRO, "rsync error " + myProcess->errorString());
		QMessageBox::warning(
				   w,
				   a.applicationName(),
				   QTranslator::tr("Rsync error:\n") + rsyncErrorStrings[myProcess->error()],
				   //myProcess->errorString(),
				   QMessageBox::Ok,
				   QMessageBox::Ok);
		return true;
	}
	if(myProcess->exitCode() != 0)
	{
		info(DEBUGMACRO, "rsync error " + myProcess->errorString());
		QMessageBox::warning(
				   w,
				   a.applicationName(),
				   QTranslator::tr("Rsync error:\n") + rsyncErrorStrings[myProcess->exitCode()],
				   QMessageBox::Ok,
				   QMessageBox::Ok);
		return true;
	}
	w->stopDlAsked = false;
	return false;
}

QString getFileType(QString filename)
{
	QMimeDatabase db;
	QMimeType mime = db.mimeTypeForFile(filename);
	QString returnValue = mime.name().section('/',0 ,0);
	return returnValue;
}

int whatIpVersion(QString ipAddress)
{
	QStringList fieldList;
	ulong field;
	uint i;

	info(DEBUGMACRO, "ipVersion of server at " + ipAddress);

	fieldList = ipAddress.split(":");
	if (fieldList.count() == 8)
	{
		for (i=0;i<8;i++)
		{
			field = fieldList[i].toUInt();
			if (field > 65535)
			{
				return 0;
			}
		}
		info(DEBUGMACRO, "Address is Ip V6");
		return 6;
	}
	fieldList = ipAddress.split(".");
	if(fieldList.count() == 4)
	{
		for (i=0;i<4;i++)
		{
			field = fieldList[i].toUInt();
			if (field > 255)
			{
				return 0;
			}
		}
		info(DEBUGMACRO, "Address is ip V4");
		return 4;
	}
	return 0;
}

void warning(QString message)
{
	QMessageBox::warning(
					   NULL,
					   a.applicationName() + "",
					   message,
					   QMessageBox::Ok,
					   QMessageBox::Ok);
}

void error(QString message)
{
	QMessageBox::warning(
					   NULL,
					   a.applicationName() + ":" + QTranslator::tr("Error"),
					   message,
					   QMessageBox::Ok,
					   QMessageBox::Ok);
}

void info(QString debugHeader, QString message)
{
	qInfo("%s %s", debugHeader.toStdString().c_str(), message.toStdString().c_str());
}

//void error()
