//
// Created by HW on 2023/07/27.
//

#ifndef OFFICEASSISTANT_NETIO_H
#define OFFICEASSISTANT_NETIO_H
#include <QString>
#include <QFile>
#include <QMessageBox>
#include <cstring>
#include <QJsonDocument>
#include <QJsonObject>
#include <Windows.h>
#include <QtNetwork/QtNetwork>


typedef struct {
    QString img;
    QString img_cover;
    QString title;
    QString func;
    QString url;
} Menu;
typedef struct {
    bool succeed;
    struct {
        QString logo_url;
        QString device_id;
        QString dev_id;
        QString token;
        QString backgroud_color;
        QString title_color;
        QString title_cover_color;
    }basic;
    QList<Menu> *menus;
}ConfigResponse;

class RequestBodyBase:public QObject{
	Q_OBJECT;
public:
    RequestBodyBase();
    virtual void sendRequest();
protected:
    QString product;
    QString partner_id;
    QString os;
    QString os_version;
    QString device_id;
    QString request_id;
    QString version;
    QString release;
    QString sign;
    QJsonDocument qJsonDocument;
	QNetworkReply *reply;
	QEventLoop eventLoop;
	QTimer *timer;
protected slots:
	void cancelDownload();
};
class ConfigRequest:public RequestBodyBase{
public:
    ConfigRequest():RequestBodyBase(){}
    void sendRequest(ConfigResponse * configResponse);
};
class OpRequest:public RequestBodyBase{
public:
    OpRequest(QString Op,QString OpValue):RequestBodyBase(),op(Op),op_value(OpValue){
        QJsonObject obj_root=qJsonDocument.object();
        QJsonValue value=op;
        obj_root.insert("op",op);
        value=op_value;
        obj_root.insert("op_value",op_value);
        qJsonDocument.setObject(obj_root);
    }
    QString getOpValue(){
        return op_value;
    }
    QString getOp(){
        return op;
    }
    void setOpValue(QString op_value){
        this->op_value=op_value;
    }
    void setOp(QString op){
        this->op=op;
    }
    void sendRequest();
protected:
    QString op;
    QString op_value;
};

class DeviceRequest:RequestBodyBase{
    DeviceRequest();
};

class OpenMulitiWechat:public RequestBodyBase{
public:
    OpenMulitiWechat(): RequestBodyBase(){}
};


#endif //OFFICEASSISTANT_NETIO_H
