// Copyright (c) 2026 - 2026 kio@little-bat.de
// BSD-2-Clause license
// https://opensource.org/licenses/BSD-2-Clause

#include "MainWindow.h"
#include "cstrings.h"
#include <QActionGroup>
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QPushButton>
#include <QSettings>

namespace kilipili
{
void __noreturn __printflike(1, 2) panic(const char* format, ...) // TODO: -> glue
{
	va_list va;
	va_start(va, format);
	vfprintf(stderr, format, va);
	fprintf(stderr, "\n");
	va_end(va);
	abort();
}
} // namespace kilipili


// ###############################################################

QSettings	  settings("kio@little-bat.de", "KilipiliGraphicsTest");
QApplication* appl = nullptr;


// ##################################################

int main(int argc, char* argv[])
{
	QApplication a(argc, argv);
	MainWindow	 w(800, 600);
	appl = &a;

	QMenuBar* mbar	   = new QMenuBar(nullptr);
	QMenu*	  fileMenu = mbar->addMenu("File");
	QMenu*	  editMenu = mbar->addMenu("Edit");
	QMenu*	  testMenu = mbar->addMenu("Test");

	// file menu:

	QAction* action = fileMenu->addAction("Quit");
	action->setShortcut(Qt::CTRL | Qt::Key_Q);
	QObject::connect(action, &QAction::triggered, appl->quit);

	// edit menu:

	editMenu->addSeparator();
	QActionGroup* zoomGroup = new QActionGroup(editMenu);
	for (int i = 1; i <= 4; i++)
	{
		action = editMenu->addAction(kilipili::usingstr("Zoom x %i", i));
		action->setCheckable(1);
		action->setShortcut(Qt::CTRL | Qt::Key(Qt::Key_0 + i));
		if (i == 1) action->setChecked(1);
		zoomGroup->addAction(action);
		QObject::connect(action, &QAction::triggered, [=, &w]() { w.setZoom(i); });
	}

	const int ws[] = {320, 400, 640, 800, 1024};
	const int hs[] = {240, 300, 480, 600, 768};

	editMenu->addSeparator();
	QActionGroup* sizeGroup = new QActionGroup(editMenu);
	for (int i = 0; i < NELEM(ws); i++)
	{
		action = editMenu->addAction(kilipili::usingstr("%i x %i", ws[i], hs[i]));
		action->setCheckable(1);
		//action->setShortcut(Qt::CTRL | Qt::Key(Qt::Key_0 + i));
		if (ws[i] == 800) action->setChecked(1);
		sizeGroup->addAction(action);
		QObject::connect(action, &QAction::triggered, [=, &w]() { w.setCanvasSize(ws[i], hs[i]); });
	}

	// test menu:

	action = testMenu->addAction("Clear");
	QObject::connect(action, &QAction::triggered, [=, &w]() { w.clear(); });
	action->setShortcut(Qt::Key_0);

	for (int i = 0; i < w.names.count(); i++)
	{
		action = testMenu->addAction(w.names[i]);
		action->setShortcut(Qt::Key_1 + i);
		QObject::connect(action, &QAction::triggered, [=, &w]() { w.runTest(i); });
	}

	w.setMenuBar(mbar);

	//w.resize(800, 600 + 20);
	w.show();
	printf("mbarheight = %i\n", mbar->size().height());
	return a.exec();
}


/*



















































*/
