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

#include "kio/kio.h"
#include "GTermWindow.h"
#include <QApplication>
#include <cmath>
#include <QTimer>
using namespace gterm;


DrawingCommand DrawTestImage(const QSize& size)
{
	return [=](QPainter&p)
	{
		static qreal deg = 0; deg += 1; if(deg>=360) deg=0;

		int w = size.width();//p.device()->width();
		int h = size.height();//p.device()->height();

		QPointF mp(w/2, h/2);
		qreal radians = min(w,h)/2;

		p.setPen(0xffff0000);
		p.drawLine(mp, mp + QPointF(-radians*cos(deg*M_PI/180),-radians*sin(deg*M_PI/180)));

		p.setPen(0xff00ff00);
		p.drawLine(mp, mp + QPointF(radians*cos(deg*M_PI/180),radians*sin(deg*M_PI/180)));
	};
}

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QApplication::quitOnLastWindowClosed();

	//GTermWindow w(QSize(1024,1024),0x114444ff,DYNAMIC_IMAGE,SM_SCALING,DS_FADING);
	GTermWindow w(QSize(1024,1024),0x224444ff,STATIC_IMAGE,SM_IGNORE,DS_TRANSPARENT);
	w.show();

	w.key_down_event = [&](uint key, uint, KeyModifiers mods)
	{
		if (mods == KM_NONE  && key == 0x1B) w.showNormalWindow();
		if (mods == KM_NONE  && key == 'f')  w.showFullscreen();
		if (mods == KM_NONE  && key == 'm')  w.showMinimizedWindow();
		if (mods == KM_SHIFT && key == 'M')  w.showMaximizedWindow();

		if (mods == KM_SHIFT && key == 'F')
			w.setDisplayStyle(w.getDisplayStyle()^DS_FRAMELESS);
		if (mods == KM_SHIFT && key == 'T')
			w.setDisplayStyle(w.getDisplayStyle()^DS_TRANSPARENT);
	};

	QTimer t(&w);
	if (w.is_static())
	{
		QSize size = w.size();
		t.setInterval(17);
		QObject::connect(&t, &QTimer::timeout, &w, [&w,size]()
		{
			w.getStaticImage()->drawCommand(DrawTestImage(size));
		});
		t.start();
	}
	else
	{
		w.getDynamicImage()->append(DrawTestImage(w.size()));
	}


	return a.exec();
}
