#include "package_manager.h"
#include <QCoreApplication>

PackageManager::PackageManager()
    : _7z(nullptr)
{
}

void PackageManager::createPackage(const QString &libraryPath, const QString &dest)
{
    QStringList attributes;
    attributes << "a"
               << "-y"
               << "-ttar" << dest + ".clc" << libraryPath;
    _7z = new QProcess();
    // TODO: Missing slot for openingError!!!
    connect(_7z, SIGNAL(error(QProcess::ProcessError)), this, SLOT(openingError(QProcess::ProcessError)));
    connect(_7z, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, &PackageManager::exported);
#if defined Q_OS_UNIX && !defined Q_OS_MAC
    _7z->start("7z", attributes); // TODO: use 7z.so
#else
    _7z->start(QCoreApplication::applicationDirPath() + "/utils/7zip", attributes); // TODO: use 7z.dll
#endif
}

void PackageManager::extractPackage(const QString &packagePath, const QString &destDir)
{
    QStringList attributes;
    QString output = "-o";
    output += destDir;
    attributes << "x"
               << "-y" << output << packagePath;
    _7z = new QProcess();
    connect(_7z, SIGNAL(error(QProcess::ProcessError)), this, SLOT(openingError(QProcess::ProcessError)));
    connect(_7z, SIGNAL(finished(int, QProcess::ExitStatus)), this, SIGNAL(imported()));
#if defined Q_OS_UNIX && !defined Q_OS_MAC
    _7z->start("7z", attributes); // TODO: use 7z.so
#else
    _7z->start(QCoreApplication::applicationDirPath() + "/utils/7zip", attributes); // TODO: use 7z.dll
#endif
}

void PackageManager::cancel()
{
    if (_7z != nullptr) {
        _7z->disconnect();
        _7z->kill();
        if (creating) {
            // TODO remove dest+".clc"
        } else {
            // TODO fixed: is done by libraryWindow
        }
    }
}