#include "phrictionclient.h"
#include "conduitclient.h"

PhrictionClient::PhrictionClient(const QString& uri, const QString& user, const QString& token, const QString& sertificate)
    : transport (new ConduitClient(uri, user, token, sertificate))
{
}

bool
PhrictionClient::createDocument(QString slug, QString title, QString content, QString description){
            //try to create
    QJsonObject request{
         {"slug", slug}
        ,{"title", title}
        ,{"content", content}
        ,{"description", description}
    };

    QJsonObject answer= transport->request("phriction.create", request);
    QJsonValue error = answer.value("error_code");
    if (!error.isUndefined() && error.isNull()){
        return true;
    }

    return false;
}

bool
PhrictionClient::updateDocument(QString slug, QString title, QString content, QString description){
            //try to create
    QJsonObject request{
         {"slug", slug}
        ,{"title", title}
        ,{"content", content}
        ,{"description", description}
    };

    QJsonObject answer= transport->request("phriction.edit", request);
    QJsonValue error = answer.value("error_code");
    if (!error.isUndefined() && error.isNull()){
        return true;
    }

    return false;
}

bool PhrictionClient::existsDocument(const QString& slug){
    QJsonObject request{
         {"slug", slug}
    };

    QJsonObject answer= transport->request("phriction.info", request);
    QJsonValue status = answer.value("result").toObject().value("status");

    if (status.toString() == "exists"){
        return true;
    }

    return false;
}

bool
PhrictionClient::publishDocument(QString slug, QString title, QString content, QString description){
    if (existsDocument(slug)){
        return updateDocument(slug, title, content, description);
    }

    QStringList slugParts = slug.split('/');
    slugParts.removeLast();

    QString slugParent;
    for (QString part: slugParts){
        slugParent += part + "/";
        if (! existsDocument(slugParent)){
            createDocument(slugParent, part, " ", "");
        }
    }

    return createDocument(slug, title, content, description);
}


PhrictionClient::~PhrictionClient(){
    delete transport;
}
