#include "hashcomparer.h"

HashComparer::HashComparer(DataParser *dataParser,QObject *)
{
    this->dataParser = dataParser;
}

void HashComparer::initialize(MainWindow* mainWindow,VersionContainer *versionContainer)
{
    connect(this,&HashComparer::sigCallCheck,mainWindow,&MainWindow::checkUpdate);
    connect(this,&HashComparer::sigHaveDelta,mainWindow,&MainWindow::showUpdateInfo);
    this->versionContainer = versionContainer;
}

void HashComparer::CompareDeltas()
{
    QList<FileData> *serverStreamingHash = new QList<FileData>;
    QList<FileData> *localStreamingHash = new QList<FileData>;
    QList<FileData> *files = new QList<FileData>;

    QFile file(serverHash);
    file.open(QIODevice::ReadOnly | QIODevice::Text);

    serverStreamingHash = dataParser->xmlFileDataParse(file.readAll(),"StreamingAssets");
    file.close();

    QFile file2(streamingHashFilename);
    file2.open(QIODevice::ReadOnly | QIODevice::Text);

    localStreamingHash = dataParser->xmlFileDataParse(file2.readAll(),"StreamingAssets");
    file2.close();

    QMutableListIterator<FileData> iterator(*localStreamingHash);

    for (auto &item:*localStreamingHash)
    {
        if(!serverStreamingHash->contains(item))
        {
            files->append(item);
        }
    }

    filesForUpdate = files;
    showDeltas();
}

void HashComparer::showDeltas()
{

    if (filesForUpdate->length() <= 0)
    {
        emit sigCallCheck();
        return;
    }
    for (auto &item:*filesForUpdate)
    {
        updateWidget->addToList(item);
    }

    emit sigHaveDelta();
}

void HashComparer::setWidget(UpdateNotifyWidget* updateWidget)
{
    this->updateWidget = updateWidget;
}

quint16 HashComparer::getFileUpdateCount() const
{
    return filesForUpdate->count();
}

QList<FileData> *HashComparer::getFilesForUpdate() const
{
    QList<FileData> *completeList = filesForUpdate;

    for (int i = 0; i < completeList->count();i++)
    {
        FileData data = completeList->at(i);
        QString streamingAssetsName = "StreamingAssets";
        quint16 baseIndex = data.path.indexOf("StreamingAssets");
        data.path = data.path.remove(0,baseIndex + streamingAssetsName.length());
        data.path.prepend("/SharedData/" + versionContainer->getLocalVersion());

        completeList->replace(i,data);
    }

    return filesForUpdate;
}

HashComparer::~HashComparer()
{

}
