#pragma once
#include "configobject.hpp"
#include <qqmlintegration.h>

namespace ZShell::config {

class Performance : public ConfigObject {
	Q_OBJECT
	QML_ANONYMOUS

	CFG_PROPERTY(bool, enabled, true)
	CFG_PROPERTY(bool, showBattery, false)
	CFG_PROPERTY(bool, showCpu, true)
	CFG_PROPERTY(bool, showGpu, true)
	CFG_PROPERTY(bool, showMemory, true)
	CFG_PROPERTY(bool, showNetwork, true)
	CFG_PROPERTY(bool, showStorage, true)
	CFG_PROPERTY(bool, showVram, true)

	public:
	explicit Performance(QObject* parent = nullptr) : ConfigObject(parent) {}
};

class DashboardSizes : public ConfigObject {
	Q_OBJECT
	QML_ANONYMOUS

	CFG_PROPERTY(int, dateTimeWidth, 110)
	CFG_PROPERTY(int, infoIconSize, 25)
	CFG_PROPERTY(int, infoWidth, 200)
	CFG_PROPERTY(int, mediaCoverArtSize, 150)
	CFG_PROPERTY(int, mediaProgressSweep, 180)
	CFG_PROPERTY(int, mediaProgressThickness, 8)
	CFG_PROPERTY(int, mediaVisualizerSize, 200)
	CFG_PROPERTY(int, mediaWidth, 200)
	CFG_PROPERTY(int, resourceProgessThickness, 10)
	CFG_PROPERTY(int, resourceSize, 200)
	CFG_PROPERTY(int, tabIndicatorHeight, 3)
	CFG_PROPERTY(int, tabIndicatorSpacing, 5)
	CFG_PROPERTY(int, weatherWidth, 250)

	public:
	explicit DashboardSizes(QObject* parent = nullptr) : ConfigObject(parent) {}
};

class Dashboard : public ConfigObject {
	Q_OBJECT
	QML_ANONYMOUS

	CFG_PROPERTY(bool, enabled, true)
	CFG_PROPERTY(int, mediaUpdateInterval, 2000)
	CONFIG_SUBOBJECT(Performance, performance)
	CFG_PROPERTY(int, resourceUpdateInterval, 1000)
	CONFIG_SUBOBJECT(DashboardSizes, sizes)

	public:
	explicit Dashboard(QObject* parent = nullptr)
		: ConfigObject(parent)
		, m_performance(new Performance(this))
		, m_sizes(new DashboardSizes(this)) {}
};

} // namespace ZShell::config
