#ifndef JSONHELPER_H
#define JSONHELPER_H

#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonArray>
#include <QVector>


/*
 * QVector<QString> <-> QStringList
 */
QVector<QString> toQVector(const QStringList & qsl);
QStringList toQStringList(const QVector<QString> & V);

/*
 * Einfache Datentypen
 */
template<class T>
void toJSON(QJsonObject & jsonObj, const QString &ParameterName, T value) { // C-b-R
    jsonObj[ParameterName] = value;
}

QJsonValue fromJSON(const QJsonObject & jsonObj, const QString &ParameterName);


/*
 * Containers, e.g. QVector of class
 */
template<template <typename> class CONTAINER, typename T>
void toJSON(QJsonObject & jsonObj, const QString &ParameterName, CONTAINER<T> V) { // C-b-R
    toJSON(jsonObj, ParameterName+".size", V.size());

    for (int i=0; i<V.size(); i++) {
        V.at(i).toJSON(jsonObj, ParameterName+QString::number(i));
//        toJSON(jsonObj, ParameterName+QString::number(i), V.at(i));
    }
}

/*
 * Containers, e.g. QVector of standard types
 */
template<template <typename> class CONTAINER, typename T>
void toJSONstd(QJsonObject & jsonObj, const QString &ParameterName, CONTAINER<T> V) { // C-b-R
    toJSON(jsonObj, ParameterName+".size", V.size());

    for (int i=0; i<V.size(); i++) {
//        V.at(i).toJSON(jsonObj, ParameterName+QString::number(i));
        toJSON(jsonObj, ParameterName+QString::number(i), V.at(i));
    }
}


void toJSONtable(QJsonObject & jsonObj, const QString &ParameterName, const QVector<QStringList> &V);
QVector<QString> fromJSONqstr(const QJsonObject & jsonObj, const QString &ParameterName);
QVector<QStringList> fromJSONtable(const QJsonObject & jsonObj, const QString &ParameterName);




/*
 *
 */
template<template <typename> class CONTAINER, typename T>
CONTAINER<T> fromJSON(const QJsonObject & jsonObj, const QString &ParameterName) {
    int size = fromJSON(jsonObj, ParameterName+".size").toInt();

    CONTAINER<T> V;

    for (int i=0; i<size; i++)
        V.push_back(T(jsonObj, ParameterName+QString::number(i)));

    return  V;
}



#endif // JSONHELPER_H