pragma ComponentBehavior: Bound

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

ConnectedRect {
	id: root

	property alias icon: iconLabel.text
	readonly property alias iconLabel: iconLabel
	readonly property alias label: label
	property alias stateEnabled: stateLayer.enabled
	readonly property alias subLabel: subLabel
	property alias subtext: subLabel.text
	property alias text: label.text
	property string trailingIcon
	property string activeItem

	signal clicked(event: MouseEvent)

	Layout.fillWidth: true
	implicitHeight: row.implicitHeight + Tokens.padding.small * 2

	StateLayer {
		id: stateLayer

		onClicked: e => root.clicked(e)
	}

	RowLayout {
		id: row

		anchors.left: parent.left
		anchors.margins: Tokens.padding.largeIncreased
		anchors.right: parent.right
		anchors.verticalCenter: parent.verticalCenter
		opacity: root.enabled ? 1 : 0.5
		spacing: Tokens.spacing.medium

		Behavior on opacity {
			Anim {}
		}

		MaterialIcon {
			id: iconLabel

			color: Colors.palette.m3onSurfaceVariant
			visible: root.icon !== ""
			fill: 1
			text: root.icon
			font.pointSize: Tokens.font.size.normal
		}

		Column {
			id: column

			Layout.fillWidth: true
			spacing: 0

			CustomText {
				id: label

				anchors.left: parent.left
				anchors.right: parent.right
				elide: Text.ElideRight
				font.pointSize: Tokens.font.size.small
			}

			CustomText {
				id: subLabel

				anchors.left: parent.left
				anchors.right: parent.right
				color: Colors.palette.m3outline
				elide: Text.ElideRight
				font.pointSize: Tokens.font.size.small
				visible: text
			}
		}

		Loader {
			active: root.activeItem && root.subtext
			asynchronous: true
			visible: active
			Layout.fillHeight: true

			sourceComponent: CustomRect {
				color: Colors.palette.m3secondaryContainer
				radius: Tokens.rounding.full
				implicitWidth: text.implicitWidth + Tokens.padding.medium * 2

				CustomText {
					id: text
					anchors.centerIn: parent
					color: Colors.palette.m3onSecondaryContainer
					text: root.activeItem
				}
			}
		}

		Loader {
			active: root.trailingIcon
			asynchronous: true
			visible: active

			sourceComponent: MaterialIcon {
				color: Colors.palette.m3onSurfaceVariant
				font.pointSize: Tokens.font.size.normal
				text: root.trailingIcon
			}
		}
	}
}
