import QtQuick 2.0
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore

import org.kde.plasma.private.pager 2.0

import "lib"

Item {
	id: panelItem

	// Heavy use of the default Pager's code.
	// See: /usr/share/plasma/plasmoid/org.kde.plasma.pager/contents/ui/main.qml
	PagerModel {
		id: pagerModel

		enabled: true
		showOnlyCurrentScreen: true //plasmoid.configuration.showOnlyCurrentScreen
		screenGeometry: plasmoid.screenGeometry
		pagerType: PagerModel.VirtualDesktops
	}

	PlasmaCore.FrameSvgItem {
		id: taskFrame
		anchors.fill: parent
		imagePath: "widgets/tasks"
		prefix: "normal"
	}

	Grid {
		id: pagerItemGrid
		anchors.fill: parent

		anchors.leftMargin: taskFrame.margins.left
		anchors.rightMargin: taskFrame.margins.right
		anchors.topMargin: taskFrame.margins.top
		anchors.bottomMargin: taskFrame.margins.bottom

		// spacing: PlasmaCore.Units.devicePixelRatio
		rows: effectiveRows
		columns: effectiveColumns

		readonly property int effectiveRows: {
			var rows = 1
			var columns = Math.floor(pagerModel.count / pagerModel.layoutRows)

			if (pagerModel.count % pagerModel.layoutRows > 0) {
				columns += 1
			}

			rows = Math.floor(pagerModel.count / columns)

			if (pagerModel.count % columns > 0) {
				rows += 1
			}

			return rows
		}

		readonly property int effectiveColumns: {
			if (!pagerModel.count) {
				return 1
			}

			return Math.ceil(pagerModel.count / effectiveRows)
		}


		readonly property real pagerItemSizeRatio: pagerModel.pagerItemSize.width / pagerModel.pagerItemSize.height
		// readonly property real widthScaleFactor: columnWidth / pagerModel.pagerItemSize.width
		// readonly property real heightScaleFactor: rowHeight / pagerModel.pagerItemSize.height

		property int rowHeight: Math.floor(height / effectiveRows)
		property int columnWidth: Math.floor(width / effectiveColumns)

		property color seperatorColor: "#44FFFFFF"
		property color activeDesktopFillColor: "#44442027"

		Repeater {
			id: repeater
			model: pagerModel

			Item {
				id: desktop
				property int desktopIndex: index
				property int desktopColumn: index % pagerItemGrid.columns
				property int desktopRow: Math.floor(index / pagerItemGrid.columns)
				property bool isActiveDesktop: (index == pagerModel.currentPage)

				width: pagerItemGrid.columnWidth
				height: pagerItemGrid.rowHeight


				Rectangle {
					anchors.fill: parent
					color: desktop.isActiveDesktop ? pagerItemGrid.activeDesktopFillColor : "transparent"
				}

				Rectangle {
					id: verticalSeperator
					visible: desktop.desktopColumn < pagerItemGrid.columns-1 // Don't show on last column
					anchors.top: parent.top
					anchors.right: parent.right
					anchors.bottom: parent.bottom
					width: Math.round(1 * PlasmaCore.Units.devicePixelRatio)
					color: pagerItemGrid.seperatorColor
				}
				Rectangle {
					id: horizontalSeperator
					visible: desktop.desktopRow < pagerItemGrid.rows-1 // Don't show on last row
					anchors.left: parent.left
					anchors.bottom: parent.bottom
					anchors.right: parent.right
					height: Math.round(1 * PlasmaCore.Units.devicePixelRatio)
					color: pagerItemGrid.seperatorColor
				}

				AppletIcon {
					anchors.fill: parent
					source: desktop.isActiveDesktop ? "unity7selectedworkspace" : ""
				}
			}
			
		}
	}
}