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

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

#include "navbar.h"
#include "ui_NavBar.h"
#include "config.h"
#include <QTimer>
#include <QtSvg/QtSvg>
#include <QPixmap>
#include "mainwindowlayout.h"
#include "globalvariables.h"
#include "MyButton.h"
#include "sqlitehelper.h"
#ifdef _DEBUG
#pragma comment(lib, "Qt5Svgd.lib")
#pragma comment(lib, "Qt5Sqld.lib")
#else
#pragma comment(lib, "Qt5Svg.lib")
#pragma comment(lib, "Qt5Sql.lib")
#endif
QString url_param;
void ConvertImageToTransparent(QImage &img)
{
	img = img.convertToFormat(QImage::Format_ARGB32);
	union myrgb
	{
		uint rgba;
		uchar rgba_bits[4];
	};
	myrgb* mybits = (myrgb*)img.bits();
	int len = img.width()*img.height();
	while (len--> 0)
	{
		mybits->rgba_bits[3] = (mybits->rgba == 0xFFFFFFFF) ? 0 : 255;
		mybits++;
	}
}

NavBar::NavBar(ConfigResponse *configResponse, MainScreen *mainScreen,QWidget *parent) :
        QWidget(parent), ui(new Ui::NavBar) {
    ui->setupUi(this);
	//this->setAttribute(Qt::WA_DeleteOnClose);
	buffer = new QByteArray;
	/*QString style = "background-color:";
	style += configResponse->basic.backgroud_color.toUpper();
	style += ";";
	setStyleSheet(style);*/
	//setStyleSheet("margin:0");
	setContentsMargins(0, 0, 0, 0);
	ConfigResponse config_response;
	ConfigRequest config_request;
	config_request.sendRequest(&config_response);
	SQLiteHelper sqlite_helper;
	sqlite_helper.get_software(&buttonStructs, &config_response);
	if(!config_response.succeed)
	{
		qColor.setNamedColor(DEFAULT_BACKGROUND_COLOR);

	}else
	{
		qColor.setNamedColor(config_response.basic.backgroud_color);
	}
	layout2 = new QHBoxLayout;
	layout_right = new QHBoxLayout;
	layout_left = new QHBoxLayout;
	logo_label = new QLabel(this);
	logo_label->setAttribute(Qt::WA_TranslucentBackground);
	//*logo = logo->scaled(this->width() / (5 / scale), this->height());
	logo_label->setScaledContents(true);
	QPixmap pixmap(QApplication::applicationDirPath() + DEFAULT_LOGO);
	pixmap.setMask(pixmap.createMaskFromColor(QColor(Qt::transparent)));
	logo_label->setAutoFillBackground(true);
	QPalette palette = logo_label->palette();
	palette.setColor(QPalette::Window, Qt::transparent);
	logo_label->setPalette(palette);
	logo_label->setPixmap(pixmap);
	logo_label->setMaximumHeight(parent->height() / 8);
	layout_left->addWidget(logo_label);
	layout_left->setAlignment(Qt::AlignCenter);
	for (auto buttonStruct : buttonStructs) {
		MyButton *myButton = new MyButton(buttonStruct, height(), height(), &buttons,this);
		myButton->setMaximumHeight(parent->height() / 8);
		layout_right->addWidget(myButton);
		//myButton->show();
		connect(myButton, &MyButton::clicked1, mainWindowLayout, &MainWindowLayout::clickButton);
		buttons << myButton;
	}
	layout_right->setAlignment(Qt::AlignLeft);
	if (!buttonStructs.empty()) {
		connect(this, &NavBar::firstUrl, mainScreen, &MainScreen::firstUrl);
		emit firstUrl(buttonStructs[0].url);
	}
	layout2->addLayout(layout_left, 1);
	layout2->addLayout(layout_right, 4);
	layout_right->setMargin(0);
	layout2->setMargin(0);
	//layout2->setAlignment(Qt::AlignJustify);
	this->setLayout(layout2);
	logo_label->show();
}

NavBar::~NavBar() {
	for (auto buttonStruct : buttonStructs) {
		delete buttonStruct.image;
		delete buttonStruct.image_cover;
	}
	for(auto button : buttons){
		layout_right->removeWidget(button);
        delete button;
    }
	layout2->removeWidget(logo_label);
	delete logo_label;
	//delete layout_left;
	delete layout_right;
	delete layout2;
    delete ui;
}

void NavBar::paintEvent(QPaintEvent *event) {
    QWidget::paintEvent(event);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    QRectF rect(0, 0, this->width(), this->height());
    painter.fillRect(rect, qColor);

}
void NavBar::resizeEvent(QResizeEvent *event) {
	QWidget::resizeEvent(event);
    for(auto button:buttons){
		button->setMaximumSize(event->size().height(), event->size().height());
        button->update();
    }
	logo_label->setMaximumSize(event->size().width() / 5, event->size().height());
}
/*void NavBar::getLogoFromInternet(ConfigResponse *configResponse) {
	qColor.setNamedColor(configResponse->basic.backgroud_color);
	
	QUrl url_logo(configResponse->basic.logo_url);
	QNetworkRequest *request_logo = new QNetworkRequest(url_logo);
	manager = new QNetworkAccessManager;
	reply = manager->get(*request_logo);
	QTimer timer;
	timer.setInterval(5000);
	connect(reply, &QNetworkReply::finished, &eventLoop,&QEventLoop::quit);
	connect(&timer, &QTimer::timeout,this, &NavBar::cancelDownload);
	eventLoop.exec();
	timer.stop();
	buffer = new QByteArray;
	delete request_logo;
	reply->close();
	if (downloadSuccess == true) {
		*buffer = reply->readAll();
		logo = new ;
		logo->loadFromData(*buffer);
		buffer->clear();
	}else
	{
		getLogoFromLocal();
	}
	delete manager;
	manager = nullptr;
	
}*/
void NavBar::storeToBuffer() {
	buffer = new QByteArray;
	
}
void NavBar::cancelDownload() {
	disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
	eventLoop.quit();
	reply->abort();
	downloadSuccess = false;
}

/*void NavBar::getLogoFromLocal() {
	QString dir = QApplication::applicationDirPath();
	QFile file(dir + DEFAULT_FILE);
	if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
		QMessageBox::warning(nullptr, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("无法打开配置文件"));
		exit(1);
	}
	buffer->clear();
	*buffer = file.readAll();
	file.close();
	QJsonDocument *qJsonDocument = new QJsonDocument;
	*qJsonDocument = QJsonDocument::fromJson(*buffer);
	QJsonObject *obj_root = new QJsonObject;
	if (qJsonDocument->isObject()) {
		*obj_root = qJsonDocument->object();
		delete qJsonDocument;
		QString logo_path = obj_root->value("basic").toObject().value("logo").toString();
		logo = new QPixmap(logo_path);
		QJsonArray *array = new  QJsonArray;
	}
	else {
		QMessageBox::warning(nullptr, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("配置文件损坏"));
		delete obj_root;
		exit(1);
	}
	delete obj_root;

}*/