import QtQuick
import QtQuick.Layouts
import ZShell.Services
import qs.Components
import qs.Helpers
import qs.Config

GridLayout {
	id: root

	anchors.left: parent.left
	anchors.margins: Appearance.padding.large
	anchors.right: parent.right
	columnSpacing: Appearance.spacing.large
	columns: 2
	rowSpacing: Appearance.spacing.large
	rows: 1

	ServiceRef {
		service: Memory
	}

	ServiceRef {
		service: Cpu
	}

	Resource {
		Layout.bottomMargin: Appearance.padding.large
		Layout.topMargin: Appearance.padding.large
		fgColor: DynamicColors.palette.m3primary
		icon: "memory"
		value: Cpu.percentage
	}

	Resource {
		Layout.bottomMargin: Appearance.padding.large
		Layout.topMargin: Appearance.padding.large
		fgColor: DynamicColors.palette.m3secondary
		icon: "memory_alt"
		value: Memory.percentage
	}

	component Resource: CustomRect {
		id: res

		required property color fgColor
		required property string icon
		required property real value

		Layout.fillWidth: true
		color: DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHigh, 2)
		implicitHeight: width
		radius: Appearance.rounding.large

		Behavior on value {
			Anim {
				duration: Appearance.anim.durations.large
			}
		}

		CircularProgress {
			id: circ

			anchors.fill: parent
			bgColor: DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHighest, 3)
			fgColor: res.fgColor
			padding: Appearance.padding.large * 3
			strokeWidth: width < 200 ? Appearance.padding.smaller : Appearance.padding.normal
			value: res.value
		}

		MaterialIcon {
			id: icon

			anchors.centerIn: parent
			color: res.fgColor
			font.pointSize: (circ.arcRadius * 0.7) || 1
			font.weight: 600
			text: res.icon
		}
	}
}
