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

// You may need to build the project (run Qt uic code generator) to get "ui_MainWindow.h" resolved

#include "mainwindow.h"
#include "ui_MainWindow.h"
#include "netio.h"
#include "config.h"
ExitManager exit_manager;
MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent), ui(new Ui::MainWindow) {
    ui->setupUi(this);
	agree = false;
	QDesktopWidget* desktopWidget = QApplication::desktop();
    QRect deskRect = desktopWidget->availableGeometry();
	resize(deskRect.width()*0.8, deskRect.height()*0.8);
	setWindowState(Qt::WindowMaximized);
    mainWindowLayout=new MainWindowLayout(this);
    setCentralWidget(mainWindowLayout);
	setWindowTitle(QString::fromLocal8Bit(TITLE));
	QString path = QApplication::applicationDirPath();
	path += LOGO_TITLEBAR;
	icon = new QIcon(path);
	setWindowIcon(*icon);
	setStyleSheet("*{font-family:SimHei;}");
	QFile file(QApplication::applicationDirPath() + DEFAULT_FILE);
	if(!file.open(QIODevice::Text|QIODevice::ReadOnly))
	{
		QMessageBox::warning(nullptr, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("无法打开配置文件"));
		exit_manager.exit(1);
	}
	QByteArray buffer;
	buffer = file.readAll();
	file.close();
	QJsonDocument document = QJsonDocument::fromJson(buffer);
	if(document.isObject())
	{
		if(document.object().value("agree").isUndefined())
		{
			QMessageBox msg;
			msg.setWindowTitle(QString::fromLocal8Bit("用户体验改善计划"));
			msg.setText(QString::fromLocal8Bit("为改善我们的服务质量，我们将向服务器发送以下信息：\n"
				"1.您的计算机配置；\n"
				"2.您计算机上的软件安装列表；\n"
				"3.您是否设置了开机启动，以及是不是通过开机启动的方式启动本软件。\n"
				"第二项信息是我们提供服务所必需的，如您选择不同意但继续使用本软件，则第二项数据将正常发送，但第一项和第三项数据不会发送。选择不同意不影响您使用本软件。"));
			msg.addButton(QString::fromLocal8Bit("同意"), QMessageBox::AcceptRole);
			msg.addButton(QString::fromLocal8Bit("不同意"), QMessageBox::RejectRole);
			int ret = msg.exec();
			if(ret==QMessageBox::AcceptRole)
			{
				QJsonObject obj_root = document.object();
				obj_root.insert("agree", true);
				document.setObject(obj_root);
				agree = true;
				DeviceRequest* device_request = new DeviceRequest;//构造函数直接发出去数据了
				delete device_request;
			}else
			{
				QJsonObject obj_root = document.object();
				obj_root.insert("agree", false);
				document.setObject(obj_root);
				agree = false;
			}
			if(file.open(QIODevice::WriteOnly|QIODevice::Text))
			{
				file.write(document.toJson());
				file.close();
			}
		}
		else if(document.object().value("agree").toBool())
		{
			agree = true;
			DeviceRequest* device_request = new DeviceRequest;
			delete device_request;
		}
	}
	else
	{
		QMessageBox msg;
		msg.setWindowTitle(QString::fromLocal8Bit("用户体验改善计划"));
		msg.setText(QString::fromLocal8Bit("为改善我们的服务质量，我们将向服务器发送以下信息：\n"
			"1.您的计算机配置；\n"
			"2.您计算机上的软件安装列表；\n"
			"3.您是否设置了开机启动，以及是不是通过开机启动的方式启动本软件。\n"
			"第二项信息是我们提供服务所必需的，如您选择不同意但继续使用本软件，则第二项数据将正常发送，但第一项和第三项数据不会发送。选择不同意不影响您使用本软件。"));
		msg.addButton(QString::fromLocal8Bit("同意"), QMessageBox::AcceptRole);
		msg.addButton(QString::fromLocal8Bit("不同意"), QMessageBox::RejectRole);
		int ret = msg.exec();
		if (ret == QMessageBox::AcceptRole)
		{
			QJsonObject obj_root;
			obj_root.insert("agree", true);
			document.setObject(obj_root);
			agree = true;
			DeviceRequest* device_request = new DeviceRequest;//构造函数直接发出去数据了
			delete device_request;
		}
		else
		{
			QJsonObject obj_root;
			obj_root.insert("agree", false);
			document.setObject(obj_root);
			agree = false;
		}
		if (file.open(QIODevice::WriteOnly | QIODevice::Text))
		{
			file.write(document.toJson());
			file.close();
		}
	}
}

MainWindow::~MainWindow() {
	SQLiteHelper sqlite_helper;
	sqlite_helper.db.close();
	QSqlDatabase::removeDatabase("mydb");
	delete icon;
	this->setCentralWidget(nullptr);
    delete mainWindowLayout;
    delete ui;
}
