#include "check_new_version.h"

#include <QUrl>
#include <QtGlobal>
#include <QStringList>

#include <QNetworkAccessManager>
#include <QEventLoop>
#include <QTimer>
#include <QNetworkRequest>
#include <QNetworkReply>

#define PREVIOUS_VERSION_TESTING "6.0.0"

HttpVersionChecker::HttpVersionChecker()
    :HttpWorker("https://bitbucket.org/luisangelsm/yacreader/wiki/Home")
{
	connect(this,SIGNAL(dataReady(const QByteArray &)),this,SLOT(checkNewVersion(const QByteArray &)));
}

void HttpVersionChecker::checkNewVersion(const QByteArray & data)
{
	checkNewVersion(QString(data));
}

bool HttpVersionChecker::checkNewVersion(QString sourceContent)
{
#ifdef Q_OS_WIN32
    QRegExp rx("YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}win32");
#endif

#if defined  Q_OS_UNIX && !defined Q_OS_MAC
    QRegExp rx("YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}X11");
#endif

#ifdef  Q_OS_MAC
    QRegExp rx("YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}Mac");
#endif
	
	int index = 0;
	bool newVersion = false;
	bool sameVersion = true;
	//bool currentVersionIsNewer = false;
#ifdef QT_DEBUG
    QString version(PREVIOUS_VERSION_TESTING);
#else
    QString version(VERSION);
#endif
	QStringList sl = version.split(".");
	if((index = rx.indexIn(sourceContent))!=-1)
	{
		int length = qMin(sl.size(),(rx.cap(4)!="")?4:3);
		for(int i=0;i<length;i++)
		{
			if(rx.cap(i+1).toInt()<sl.at(i).toInt())
			{
				return false;
			}
			if(rx.cap(i+1).toInt()>sl.at(i).toInt()){
				newVersion=true;
				break;
			}
			else
				sameVersion = sameVersion && rx.cap(i+1).toInt()==sl.at(i).toInt();
		}
		if(!newVersion && sameVersion)
		{
			if((sl.size()==3)&&(rx.cap(4)!=""))
				newVersion = true;
		}
	}

	if(newVersion == true)
	{
		emit newVersionDetected();
		return true;
	}
	else
	{
		return false;
	}
}
