import Quickshell
import QtQuick
import QtQuick.Shapes
import qs.Components
import qs.Config
import qs.Modules as Modules
import qs.Modules.Notifications as Notifications
import qs.Modules.Notifications.Sidebar as Sidebar
import qs.Modules.Notifications.Sidebar.Utils as Utils
import qs.Modules.Dashboard as Dashboard
import qs.Modules.Osd as Osd
import qs.Modules.Launcher as Launcher
import qs.Modules.Resources as Resources
import qs.Modules.Drawing as Drawing
import qs.Modules.Settings as Settings
import qs.Modules.Dock as Dock

Shape {
	id: root

	required property Item bar
	required property Panels panels
	required property PersistentProperties visibilities

	anchors.fill: parent
	anchors.margins: Config.barConfig.border
	anchors.topMargin: bar.implicitHeight
	asynchronous: true
	preferredRendererType: Shape.CurveRenderer

	Drawing.Background {
		startX: 0
		startY: wrapper.y - rounding
		wrapper: root.panels.drawing
	}

	Resources.Background {
		startX: 0 - rounding
		startY: 0
		wrapper: root.panels.resources
	}

	Osd.Background {
		startX: root.width - root.panels.sidebar.width
		startY: (root.height - wrapper.height) / 2 - rounding
		wrapper: root.panels.osd
	}

	Modules.Background {
		invertBottomRounding: wrapper.x <= 0
		rounding: root.panels.popouts.currentName.startsWith("updates") || root.panels.popouts.currentName.startsWith("audio") ? Appearance.rounding.normal : Appearance.rounding.smallest
		startX: wrapper.x - rounding
		startY: wrapper.y
		wrapper: root.panels.popouts
	}

	Notifications.Background {
		sidebar: sidebar
		startX: root.width
		startY: 0
		wrapper: root.panels.notifications
	}

	Launcher.Background {
		startX: (root.width - wrapper.width) / 2 - rounding
		startY: root.height
		wrapper: root.panels.launcher
	}

	Dashboard.Background {
		startX: root.width - root.panels.dashboard.width - rounding
		startY: 0
		wrapper: root.panels.dashboard
	}

	Utils.Background {
		sidebar: sidebar
		startX: root.width
		startY: root.height
		wrapper: root.panels.utilities
	}

	Sidebar.Background {
		id: sidebar

		panels: root.panels
		startX: root.width
		startY: root.panels.notifications.height
		wrapper: root.panels.sidebar
	}

	Settings.Background {
		id: settings

		startX: (root.width - wrapper.width) / 2 - rounding
		startY: 0
		wrapper: root.panels.settings
	}

	Dock.Background {
		id: dock

		startX: (root.width - wrapper.width) / 2 - rounding
		startY: root.height
		wrapper: root.panels.dock
	}
}
