#include <QObject>
#include <QCoreApplication>
#include <QDebug>

#include "qtlib_file.h"
#include "qtlib_dir.h"
#include "qtlib_json.h"
#include "qtlib_config.h"
#include "qtlib_networkresource.h"
#include "qtlib_ocsapi.h"
#include "qtlib_package.h"

class Test : public QObject
{
public:
    Test() {}
    virtual ~Test() {}

    void start()
    {
        qDebug() << "Start";

        qtlib::NetworkResource *resource = new qtlib::NetworkResource(
                    "LGPL-3.0",
                    QUrl("https://api.opensource.org/license/LGPL-3.0"),
                    false,
                    this);
        connect(resource, &qtlib::NetworkResource::downloadProgress, this, &Test::downloadProgress);
        QJsonObject result = qtlib::Json(resource->get()->readData()).toObject();

        qDebug() << resource->id() << ":" << result["name"].toString();

        connect(resource, &qtlib::NetworkResource::finished, this, &Test::finished);
        resource->setId(result["name"].toString());
        resource->setUrl(QUrl(result["text"].toArray()[0].toObject()["url"].toString()));
        resource->setAsync(true);
        resource->get();
    }

public slots:
    void finished(qtlib::NetworkResource *resource)
    {
        QString path = qtlib::Dir::tempPath() + "/" + resource->url().fileName();
        resource->saveData(path);

        qDebug() << "Downloaded" << resource->id() << ":" << path;
        qDebug() << "Finished";

        resource->deleteLater();
        QCoreApplication::exit();
    }

    void downloadProgress(QString id, qint64 bytesReceived, qint64 bytesTotal)
    {
        qDebug() << "Progress" << id << ":" << bytesReceived << "/" << bytesTotal;
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    Test test;
    test.start();

    return app.exec();
}