#include "HomeWidget.h"

#include <QMessageBox>
#include <QApplication>
#include <QDebug>

#include <QApplication>
#include <QDir>
#include <QFileInfoList>
#include <QFileInfo>
#include <QStringList>

#include "MainWindow.h"

#include "ui_HomeWidget.h"

enum class TownType : uint8_t {
	TT_Matian
};

HomeWidget::HomeWidget(MainWindow *parent) :
    PageBaseWidget(parent),
    ui(new Ui::HomeWidget)
{
    ui->setupUi(this);

    connect(ui->btn_exit_system, &QPushButton::clicked, this, &HomeWidget::OnExitSystem);
    connect(ui->btn_matian, &QPushButton::clicked, this, &HomeWidget::OnEnterDetailed);
	InitIrreButton(ui->btn_matian, ":/res/matian-b.png", DetailedType::DT_Matian);
	connect(ui->btn_yangjiao, &QPushButton::clicked, this, &HomeWidget::OnEnterDetailed);
	InitIrreButton(ui->btn_yangjiao, ":/res/yangjiao-b.png", DetailedType::DT_Yangjiao);
	connect(ui->btn_hanwang, &QPushButton::clicked, this, &HomeWidget::OnEnterDetailed);
	InitIrreButton(ui->btn_hanwang, ":/res/hanwang-a.png", DetailedType::DT_Hanwang);
	connect(ui->btn_qinquan, &QPushButton::clicked, this, &HomeWidget::OnEnterDetailed);
	InitIrreButton(ui->btn_qinquan, ":/res/qinquan-a.png", DetailedType::DT_Qinquan);
	connect(ui->btn_guaier, &QPushButton::clicked, this, &HomeWidget::OnEnterDetailed);
	InitIrreButton(ui->btn_guaier, ":/res/guaier-a.png", DetailedType::DT_Guaier);
	connect(ui->btn_shixia, &QPushButton::clicked, this, &HomeWidget::OnEnterDetailed);
	InitIrreButton(ui->btn_shixia, ":/res/shixia-a.png", DetailedType::DT_Shixia);
	connect(ui->btn_liaoyang, &QPushButton::clicked, this, &HomeWidget::OnEnterDetailed);
	InitIrreButton(ui->btn_liaoyang, ":/res/liaoyang-a.png", DetailedType::DT_Liaoyang);
	connect(ui->btn_tongyu, &QPushButton::clicked, this, &HomeWidget::OnEnterDetailed);
	InitIrreButton(ui->btn_tongyu, ":/res/tongyu-a.png", DetailedType::DT_Tongyu);

	ui->btn_exit_system->hide();

	//InitSequenceFrame();
    
}

HomeWidget::~HomeWidget()
{
    delete ui;
}

void HomeWidget::Use() {
	PageBaseWidget::Use();

	if (nullptr != sequenceFrame_) {
		sequenceFrame_->hide();
	}
}

void HomeWidget::OnExitSystem() {
	//QMessageBox::StandardButton reply;
    QMessageBox messaBox(QMessageBox::Question, "询问", "确定关闭系统?", QMessageBox::Yes | QMessageBox::No, this);
   // messaBox.setStyleSheet(QString(messageBoxQss));
    messaBox.setButtonText(QMessageBox::Yes, "确定");
    messaBox.setButtonText(QMessageBox::No, "取消");
	//messaBox.setWindowFlags(Qt::FramelessWindowHint | Qt::WindowTitleHint);
	int reply = messaBox.exec();// question(this, "询问", "确定关闭系统?", QMessageBox::Yes | QMessageBox::No);
	//reply = QMessageBox::question(this, "info", tr(" are you sure to exit system?  "),
//		QMessageBox::Yes | QMessageBox::No);
	if (reply == QMessageBox::Yes) {
		QApplication::quit();
	}
}

void HomeWidget::OnEnterDetailed() {
	MainWindow::Get().PlayAudio();

	MainWindow* mainWindow = GetParentWidget();
	if (nullptr == mainWindow) {
		qDebug() << __FUNCTION__ << "widget is nullptr";
		return;
	}

	QPushButton* pbt = reinterpret_cast<QPushButton*>(sender());
	int index = pbt->property("index").toInt();

	const QRect& rect = pbt->geometry();
	const QPoint center = rect.center() ;
	if (nullptr != sequenceFrame_) {
		QSize size = sequenceFrame_->geometry().size() / 2;
		sequenceFrame_->move(center - QPoint(size.width(), size.height()));
		sequenceFrame_->show();
	}
	
	QTimer::singleShot(600, [=] {
		mainWindow->ShowDetailedTown(static_cast<DetailedType>(index));
		}
	);
}

void HomeWidget::InitIrreButton(QPushButton* pbt, const QString& url, DetailedType dt) {
	QPixmap pix;
	pix.load(url);
	pbt->setFixedSize(pix.size());
	pbt->setMask(pix.mask());

	pbt->setProperty("index", static_cast<int>(dt));
}

void HomeWidget::InitSequenceFrame() {
	const QString landmarkPath = QApplication::applicationDirPath() + "/sequence/circle";

	QStringList pngFileList;
	QDir directory(landmarkPath);
	if (!directory.exists()) {
		qDebug() << "Directory does not exist: " << landmarkPath;
		return;
	}

	QFileInfoList entries = directory.entryInfoList(QStringList() << "*.png", QDir::Files | QDir::NoDotAndDotDot);

	for (const QFileInfo& entry : entries) {
		QString filePath = entry.absoluteFilePath();
		pngFileList.append(filePath);
	}

	sequenceFrame_ = new SequenceFrame(pngFileList, this);
	sequenceFrame_->raise();
	sequenceFrame_->setGeometry(0, 0, 460, 460);
	sequenceFrame_->hide();
	//sequenceFrame_->move(752, 501);

}