import QtCore
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls.Basic as Control
import QtQuick.Dialogs
import Linphone
import SettingsCpp 1.0
import UtilsCpp
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle

AbstractSettingsLayout {
	id: mainItem
	saveButtonVisible: false

	width: parent?.width
	contentModel: [
		{
			title: qsTr("Détails"),
			subTitle: qsTr("Editer les informations de votre compte."),
			contentComponent: accountParametersComponent
		},
		{
			title: qsTr("Vos appareils"),
			subTitle: qsTr("La liste des appareils connectés à votre compte. Vous pouvez retirer les appareils que vous n’utilisez plus."),
			contentComponent: accountDevicesComponent
		}
	]

	property alias account: mainItem.model

	// Account parameters
	//////////////////////////

	Component {
		id: accountParametersComponent
		ColumnLayout {
			Layout.fillWidth: true
			spacing: 20 * DefaultStyle.dp
			Avatar {
				id: avatar
				account: model
				displayPresence: false
				Layout.preferredWidth: 100 * DefaultStyle.dp
				Layout.preferredHeight: 100 * DefaultStyle.dp
				Layout.alignment: Qt.AlignHCenter
			}
			IconLabelButton {
				visible: model.core.pictureUri.length === 0
				Layout.preferredWidth: width
				icon.source: AppIcons.camera
				icon.width: 17 * DefaultStyle.dp
				icon.height: 17 * DefaultStyle.dp
				text: qsTr("Ajouter une image")
				style: ButtonStyle.noBackground
				onClicked: fileDialog.open()
				Layout.alignment: Qt.AlignHCenter
			}
			RowLayout {
				visible: model.core.pictureUri.length > 0
				Layout.alignment: Qt.AlignHCenter
				spacing: 5 * DefaultStyle.dp
				IconLabelButton {
					Layout.preferredWidth: width
					icon.source: AppIcons.pencil
					icon.width: 17 * DefaultStyle.dp
					icon.height: 17 * DefaultStyle.dp
					text: qsTr("Modifier l'image")
					style: ButtonStyle.noBackground
					onClicked: fileDialog.open()
				}
				IconLabelButton {
					Layout.preferredWidth: width
					icon.source: AppIcons.trashCan
					icon.width: 17 * DefaultStyle.dp
					icon.height: 17 * DefaultStyle.dp
					text: qsTr("Supprimer l'image")
					style: ButtonStyle.noBackground
					onClicked: model.core.pictureUri = ""
				}
			}
			FileDialog {
				id: fileDialog
				currentFolder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
				onAccepted: {
					var avatarPath = UtilsCpp.createAvatar( selectedFile )
					if(avatarPath){
						model.core.pictureUri = avatarPath
						avatar.model = model
					}
				}
			}
			RowLayout {
				Layout.fillWidth: true
				spacing: 5 * DefaultStyle.dp
				Text {
					Layout.alignment: Qt.AlignLeft
					text: qsTr("Adresse SIP :")
					color: DefaultStyle.main2_600
					font: Typography.p2l
				}
				Text {
					Layout.alignment: Qt.AlignLeft
					text: model.core.identityAddress
					color: DefaultStyle.main2_600
					font: Typography.p1
				}
				Item {
					Layout.fillWidth: true
				}
				IconLabelButton {
					Layout.alignment: Qt.AlignRight
					icon.source: AppIcons.copy
					style: ButtonStyle.noBackground
					onClicked: UtilsCpp.copyToClipboard(model.core.identityAddress)
				}
			}
			ColumnLayout {
				spacing: 5 * DefaultStyle.dp
				Layout.alignment: Qt.AlignLeft
				Text {
					text: qsTr("Nom d’affichage")
					color: DefaultStyle.main2_600
					font: Typography.p2l
				}
				Text {
					text: qsTr("Le nom qui sera affiché à vos correspondants lors de vos échanges.")
					color: DefaultStyle.main2_600
					font: Typography.p1
				}
			}
			TextField {
				Layout.alignment: Qt.AlignLeft
				Layout.fillWidth: true
				Layout.preferredHeight: 49 * DefaultStyle.dp
				initialText: model.core.displayName
				backgroundColor: DefaultStyle.grey_100
				onEditingFinished: {
					if (text.length != 0) model.core.displayName = text
				}
				toValidate: true
			}
			Text {
				text: qsTr("Indicatif international*")
				color: DefaultStyle.main2_600
				font: Typography.p2l
			}
			ComboSetting {
				Layout.fillWidth: true
				Layout.topMargin: -15 * DefaultStyle.dp
				entries: account.core.dialPlans
				propertyName: "dialPlan"
				propertyOwnerGui: account
				textRole: 'text'
				flagRole: 'flag'
			}
			SwitchSetting {
				titleText: account?.core.humaneReadableRegistrationState
				subTitleText: account?.core.humaneReadableRegistrationStateExplained
				propertyName: "registerEnabled"
				propertyOwnerGui: account
			}
			RowLayout {
				id:mainItem
				spacing : 20 * DefaultStyle.dp
				ColumnLayout {
					spacing : 5 * DefaultStyle.dp
					Text {
						text: qsTr("Supprimer mon compte")
						font: Typography.p2l
						wrapMode: Text.WordWrap
						color: DefaultStyle.danger_500main
						Layout.fillWidth: true
					}
					Text {
						text: qsTr("Votre compte sera retiré de ce client linphone, mais vous restez connecté sur vos autres clients")
						font: Typography.p1
						wrapMode: Text.WordWrap
						color: DefaultStyle.main2_500main
						Layout.fillWidth: true
					}
				}
				Item {
					Layout.fillWidth: true
				}
				BigButton {
					style: ButtonStyle.noBackgroundRed
					Layout.alignment: Qt.AlignRight
					Layout.rightMargin: 5 * DefaultStyle.dp
					icon.source: AppIcons.trashCan
					onClicked: {
						var mainWin = UtilsCpp.getMainWindow()
						mainWin.showConfirmationLambdaPopup("",
							qsTr("Supprimer ") + (model.core.displayName.length > 0 ? model.core.displayName : qsTr("le compte")) + " ?",
							qsTr("Vous pouvez vous reconnecter à tout moment en cliquant sur \"Ajouter un compte\".\nCependant toutes les informations stockées sur ce périphérique seront supprimées."),
							function (confirmed) {
								if (confirmed) {
									account.core.removeAccount()
								}
							}
						)
					}
				}
			}
		}
	}


	// Account devices
	//////////////////////////

	Component {
		id: accountDevicesComponent
		RoundedPane {
			Layout.fillWidth: true
			Layout.fillHeight: true
			// Layout.minimumHeight: account.core.devices.length * 133 * DefaultStyle.dp + (account.core.devices.length - 1) * 15 * DefaultStyle.dp +  2 * 21 * DefaultStyle.dp
			Layout.rightMargin: 30 * DefaultStyle.dp
			Layout.topMargin: 20 * DefaultStyle.dp
			Layout.bottomMargin: 4 * DefaultStyle.dp
			Layout.leftMargin: 44 * DefaultStyle.dp
			topPadding: 21 * DefaultStyle.dp
			bottomPadding: 21 * DefaultStyle.dp
			leftPadding: 17 * DefaultStyle.dp
			rightPadding: 17 * DefaultStyle.dp
			background: Rectangle {
				anchors.fill: parent
				color: DefaultStyle.grey_100
				radius: 15 * DefaultStyle.dp
			}
			contentItem: ColumnLayout {
				spacing: 15 * DefaultStyle.dp
				Repeater {
					id: devices
					model: AccountDeviceProxy {
						id: accountDeviceProxy
						account: model
					}
					Control.Control{
						Layout.fillWidth: true
						height: 133 * DefaultStyle.dp
						topPadding: 26 * DefaultStyle.dp
						bottomPadding: 26 * DefaultStyle.dp
						rightPadding: 36 * DefaultStyle.dp
						leftPadding: 33 * DefaultStyle.dp
						background: Rectangle {
							anchors.fill: parent
							color: DefaultStyle.grey_0
							radius: 10 * DefaultStyle.dp
						}
						contentItem: ColumnLayout {
							width: parent.width
							spacing: 20 * DefaultStyle.dp
							RowLayout {
								spacing: 5 * DefaultStyle.dp
								EffectImage {
									Layout.preferredWidth: 24 * DefaultStyle.dp
									Layout.preferredHeight: 24 * DefaultStyle.dp
									fillMode: Image.PreserveAspectFit
									colorizationColor: DefaultStyle.main2_600
									imageSource: modelData.core.userAgent.toLowerCase().includes('ios') | modelData.core.userAgent.toLowerCase().includes('android') ? AppIcons.mobile : AppIcons.desktop
								}
								Text {
									text: modelData.core.deviceName
									color: DefaultStyle.main2_600
									font: Typography.p2
								}
								Item {
									Layout.fillWidth: true
								}
								MediumButton {
									Layout.alignment: Qt.AlignRight
									text: qsTr("Supprimer")
									icon.source: AppIcons.trashCan
									icon.width: 16 * DefaultStyle.dp
									icon.height: 16 * DefaultStyle.dp
									style: ButtonStyle.tertiary
									onClicked: {
										var mainWin = UtilsCpp.getMainWindow()
										mainWin.showConfirmationLambdaPopup("",
											qsTr("Supprimer ") + modelData.core.deviceName + " ?", "",
											function (confirmed) {
												if (confirmed) {
													accountDeviceProxy.deleteDevice(modelData)
												}
											}
										)
									}
								}
							}
							RowLayout {
								spacing: 5 * DefaultStyle.dp
								Text {
									text: qsTr("Dernière connexion:")
									color: DefaultStyle.main2_600
									font: Typography.p2
								}
								EffectImage {
									Layout.preferredWidth: 20 * DefaultStyle.dp
									Layout.preferredHeight: 20 * DefaultStyle.dp
									imageSource: AppIcons.calendar
									colorizationColor: DefaultStyle.main2_600
									fillMode: Image.PreserveAspectFit
								}
								Text {
									text: UtilsCpp.formatDate(modelData.core.lastUpdateTimestamp,false)
									color: DefaultStyle.main2_600
									font: Typography.p1
								}
								EffectImage {
									Layout.preferredWidth: 20 * DefaultStyle.dp
									Layout.preferredHeight: 20 * DefaultStyle.dp
									imageSource: AppIcons.clock
									colorizationColor: DefaultStyle.main2_600
									fillMode: Image.PreserveAspectFit
								}
								Text {
									text: UtilsCpp.formatTime(modelData.core.lastUpdateTimestamp)
									color: DefaultStyle.main2_600
									font: Typography.p1
								}
							}
						}
					}
				}
			}
		}
	}
}
