// SPDX-License-Identifier: LicenseRef-AGPL-3.0-only-OpenSSL

#ifndef CHIAKI_MAINWINDOW_H
#define CHIAKI_MAINWINDOW_H

#include <QMainWindow>

#include "discoverymanager.h"
#include "host.h"

class DynamicGridWidget;
class ServerItemWidget;
class Settings;

struct DisplayServer
{
	DiscoveryHost discovery_host;
	ManualHost manual_host;
	bool discovered;

	RegisteredHost registered_host;
	bool registered;

	QString GetHostAddr() const { return discovered ? discovery_host.host_addr : manual_host.GetHost(); }
	bool IsPS5() const { return discovered ? discovery_host.ps5 :
		(registered ? chiaki_target_is_ps5(registered_host.GetTarget()) : false); }
};

class MainWindow : public QMainWindow
{
	Q_OBJECT

	private:
		Settings *settings;

		QIcon discover_action_icon;
		QIcon discover_action_off_icon;
		QAction *discover_action;

		DynamicGridWidget *grid_widget;
		QList<ServerItemWidget *> server_item_widgets;

		DiscoveryManager discovery_manager;

		QList<DisplayServer> display_servers;

		DisplayServer *DisplayServerFromSender();
		void SendWakeup(const DisplayServer *server);

	private slots:
		void ServerItemWidgetSelected();
		void ServerItemWidgetTriggered();
		void ServerItemWidgetDeleteTriggered();
		void ServerItemWidgetWakeTriggered();

		void UpdateDiscoveryEnabled();
		void ShowSettings();
		void Quit();

		void UpdateDisplayServers();
		void UpdateServerWidgets();

	public:
		explicit MainWindow(Settings *settings, QWidget *parent = nullptr);
		~MainWindow() override;
};

#endif //CHIAKI_MAINWINDOW_H