#pragma once
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>
#include <QString>
#include <QObject>
#include <QDate>
#include <QtNetwork/QtNetwork>
#include "buttonstruct.h"
struct ConfigResponse;
class ConfigRequest;
class SoftwareRequest;
typedef struct tagRecord{
	int id;
	int sort;
	QString app_id;
	bool locked;
	QString type;
	QString category_id;
	QString logo;
	QString name;
	QString orig_name;
	QString version;
	QString dev;
	time_t create_time;
	time_t use_time;
	QString op;
	QString func;
	QString path;
	QString url;
	bool status;
}Record;
#include "netio.h"
struct Categrory
{
	int id;
	QString name;
	bool display;
	int sort;
};
class SQLiteHelper : public QObject
{
	Q_OBJECT

public:
	SQLiteHelper(QObject *parent = nullptr);
	bool update_software();
	bool insert_software(QString name, QString orig_name, QString path, QString sort, bool* categories);
	bool edit_software(QString name, QString orig_name, QString path, QString sort, bool* categories,QString type="");
	bool get_software(QList<ButtonStruct>* buttons, ConfigResponse* config_response);
	bool update_app();
	bool get_buttons(QList<ButtonStruct> &buttons);
	bool get_category(QList<Categrory> &categrories);
	bool set_category(QList<Categrory>& categrories);
	bool get_all_software(QList<Record> &softwares,int category);
	QSqlDatabase db;

	~SQLiteHelper();
	
private:
	QNetworkReply* reply;
	QEventLoop eventLoop;
	bool downloadSuccess;

	void cancelDownload();
};
