// SPDX-License-Identifier: GPL-2.0
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.12
import QtQuick.Dialogs 1.3
import org.subsurfacedivelog.mobile 1.0
import org.kde.kirigami 2.4 as Kirigami

Kirigami.ScrollablePage {
	id: summary
	DiveSummaryModel { id: summaryModel }
	property string firstDive: ""
	property string lastDive: ""
	property int headerColumnWidth: Math.floor(width / 3)

	background: Rectangle { color: subsurfaceTheme.backgroundColor }
	title: qsTr("Dive summary")

	function reload() {
		summaryModel.setNumData(2)
		summaryModel.calc(0, selectionPrimary.currentIndex)
		summaryModel.calc(1, selectionSecondary.currentIndex)
		firstDive = Backend.firstDiveDate()
		lastDive = Backend.lastDiveDate()
	}

	onVisibleChanged: {
		if (visible) {
			reload()
		}
	}
	Connections {
		target: Backend
		onLengthChanged: {
			reload()
		}
		onVolumeChanged: {
			reload()
		}
	}

	GridLayout {
		columns: 3
		width: parent.width
		columnSpacing: Kirigami.Units.smallSpacing
		rowSpacing: Kirigami.Units.smallSpacing

		ListModel {
			id: monthModel
			ListElement {text: qsTr("All")}
			ListElement {text: qsTr("1 month")}
			ListElement {text: qsTr("3 months")}
			ListElement {text: qsTr("6 months")}
			ListElement {text: qsTr("1 year")}
		}

		TemplateLabel {
			text: qsTr("last dive:")
			font.bold: true
			width: headerColumnWidth
		}
		TemplateLabel {
			Layout.alignment: Qt.AlignCenter
			text: summary.lastDive
		}
		TemplateLabel { /* just filling the third column with nothing */ }
		TemplateLabel {
			text: qsTr("first dive:")
			font.bold: true
			width: headerColumnWidth
		}
		TemplateLabel {
			Layout.alignment: Qt.AlignCenter
			text: summary.firstDive
		}
		TemplateLabel { /* just filling the third column with nothing */ }

		TemplateLabel {
			Layout.columnSpan: 3
		}

		TemplateButton {
			/* Replace by signals from the core in due course. */
			text: qsTr("Refresh")
			implicitWidth: headerColumnWidth
			onClicked: reload()
		}
		TemplateComboBox {
			id: selectionPrimary
			editable: false
			currentIndex: 0
			model: monthModel
			onActivated:  {
				summaryModel.calc(0, currentIndex)
			}
		}
		TemplateComboBox {
			id: selectionSecondary
			editable: false
			currentIndex: 3
			model: monthModel
			onActivated:  {
				summaryModel.calc(1, currentIndex)
			}
		}

		Component {
			id: rowDelegate
			Row {
				height: headerLabel.height + Kirigami.Units.largeSpacing
				Rectangle {
					width: Kirigami.Units.gridUnit
					height: parent.height
					color: "transparent"
				}
				Rectangle {
					color: index & 1 ? subsurfaceTheme.backgroundColor : subsurfaceTheme.lightPrimaryColor
					width: headerColumnWidth + Kirigami.Units.gridUnit
					height: headerLabel.height + Kirigami.Units.largeSpacing
					Label {
						id: headerLabel
						color: subsurfaceTheme.textColor
						anchors.verticalCenter: parent.verticalCenter
						leftPadding: Kirigami.Units.largeSpacing
						text: header !== undefined ? header : ""
						font.bold: true
					}
				}
				Rectangle {
					color: index & 1 ? subsurfaceTheme.backgroundColor : subsurfaceTheme.lightPrimaryColor
					width: headerColumnWidth - 2 * Kirigami.Units.gridUnit
					height: headerLabel.height + Kirigami.Units.largeSpacing
					Label {
						color: subsurfaceTheme.textColor
						anchors.verticalCenter: parent.verticalCenter
						text: col0 !== undefined ? col0 : ""
					}
				}
				Rectangle {
					color: index & 1 ? subsurfaceTheme.backgroundColor : subsurfaceTheme.lightPrimaryColor
					width: headerColumnWidth - 2 * Kirigami.Units.gridUnit
					height: headerLabel.height + Kirigami.Units.largeSpacing
					Label {
						color: subsurfaceTheme.textColor
						anchors.verticalCenter: parent.verticalCenter
						text: col1 !== undefined ? col1 : ""
					}
				}
			}
		}

		Component {
			id: sectionDelegate
			Column {
				Rectangle {
					width: headerColumnWidth * 3 - Kirigami.Units.gridUnit * 2
					height: Kirigami.Units.largeSpacing
					color: subsurfaceTheme.backgroundColor
				}
				Rectangle {
					width: headerColumnWidth * 3 - Kirigami.Units.gridUnit * 2
					height: sectionLabel.height + Kirigami.Units.largeSpacing
					Label {
						id: sectionLabel
						anchors.verticalCenter: parent.verticalCenter
						leftPadding: Kirigami.Units.largeSpacing
						color: subsurfaceTheme.textColor
						text: section
						font.bold: true
					}
				}
			}
		}
		ListView {
			id: resultsTable
			model: summaryModel
			Layout.columnSpan: 3
			width: summary.width
			height: summaryModel.rowCount() * 2 * Kirigami.Units.gridUnit
			delegate: rowDelegate
			section.property: "section"
			section.delegate: sectionDelegate
		}
	}
}
