import QtQuick
import QtQuick.Layouts
import QtQuick.Effects
import QtQml.Models
import QtQuick.Controls.Basic as Control
import Linphone
import EnumsToStringCpp 1.0
import UtilsCpp 1.0
import SettingsCpp 1.0
// =============================================================================

Item {
	id: mainItem
	property CallGui call
	property ConferenceGui conference: call && call.core.conference
	property bool callTerminatedByUser: false
	property bool callStarted: call? call.core.isStarted : false
	readonly property var callState: call?.core.state
	property int conferenceLayout: call ? call.core.conferenceVideoLayout : LinphoneEnums.ConferenceLayout.ActiveSpeaker
	property int participantDeviceCount: conference ? conference.core.participantDeviceCount : -1
	onParticipantDeviceCountChanged: {
		setConferenceLayout()
	}
	Component.onCompleted: setConferenceLayout()
	onConferenceLayoutChanged: {
		console.log("CallLayout change : " +conferenceLayout)
		setConferenceLayout()
	}

	Connections {
		target: mainItem.conference? mainItem.conference.core : null
		function onIsScreenSharingEnabledChanged() {
			setConferenceLayout()
		}
	}

	function setConferenceLayout() {
		callLayout.sourceComponent = undefined	// unload old view before opening the new view to avoid conflicts in Video UI.
		callLayout.sourceComponent = conference
			? conference.core.isScreenSharingEnabled || (mainItem.conferenceLayout == LinphoneEnums.ConferenceLayout.ActiveSpeaker && participantDeviceCount > 1)
				? activeSpeakerComponent
				: participantDeviceCount <= 1
					? waitingForOthersComponent
					: gridComponent
			: activeSpeakerComponent
	}

	Text {
		id: callTerminatedText
		anchors.horizontalCenter: parent.horizontalCenter
		anchors.top: parent.top
		anchors.topMargin: 25 * DefaultStyle.dp
		z: 1
		visible: mainItem.callState === LinphoneEnums.CallState.End || mainItem.callState === LinphoneEnums.CallState.Error || mainItem.callState === LinphoneEnums.CallState.Released
		text: mainItem.conference
				? qsTr("Vous avez quitté la conférence")
				: mainItem.callTerminatedByUser
					? qsTr("Vous avez terminé l'appel") 
					: mainItem.callStarted 
						? qsTr("Votre correspondant a terminé l'appel")
						: call && call.core.lastErrorMessage || ""
		color: DefaultStyle.grey_0
		font {
			pixelSize: 22 * DefaultStyle.dp
			weight: 300 * DefaultStyle.dp
		}
	}
	
	Loader{
		id: callLayout
		anchors.fill: parent
		sourceComponent: mainItem.participantDeviceCount === 0
			? waitingForOthersComponent
			: activeSpeakerComponent
	}

	Component {
		id: waitingForOthersComponent
		Rectangle {
			color: DefaultStyle.grey_600
			radius: 15 * DefaultStyle.dp
			ColumnLayout {
				anchors.centerIn: parent
				spacing: 22 * DefaultStyle.dp
				width: waitText.implicitWidth
				Text {
					id: waitText
					text: qsTr("Waiting for other participants...")
					Layout.preferredHeight: 67 * DefaultStyle.dp
					Layout.alignment: Qt.AlignHCenter
					horizontalAlignment: Text.AlignHCenter
					color: DefaultStyle.grey_0
					font {
						pixelSize: 30 * DefaultStyle.dp
						weight: 300 * DefaultStyle.dp
					}
				}
				Item {
					Layout.fillWidth: true
					BigButton {
						color: pressed ? DefaultStyle.main2_200 : "transparent"
						borderColor: DefaultStyle.main2_400
						icon.source: AppIcons.shareNetwork
						contentImageColor: DefaultStyle.main2_400
						text: qsTr("Share invitation")
						anchors.centerIn: parent
						textColor: DefaultStyle.main2_400
						onClicked: {
							if (mainItem.conference) {
								UtilsCpp.copyToClipboard(mainItem.call.core.remoteAddress)
								showInformationPopup(qsTr("Copié"), qsTr("Le lien de la réunion a été copié dans le presse-papier"), true)
							}
						}
					}
				}
			}
		}
	}
	
	Component{
		id: activeSpeakerComponent
		ActiveSpeakerLayout{
			Layout.fillWidth: true
			Layout.fillHeight: true
			call: mainItem.call
		}
	}
	Component{
		id: gridComponent
		CallGridLayout{
			Layout.fillWidth: true
			Layout.fillHeight: true
			call: mainItem.call
		}
	}
}
// TODO : waitingForParticipant
		// ColumnLayout {
		// 	id: waitingForParticipant
		// 	Text {
		// 		text: qsTr("Waiting for other participants...")
		// 		color: DefaultStyle.frey_0
		// 		font {
		// 			pixelSize: 30 * DefaultStyle.dp
		// 			weight: 300 * DefaultStyle.dp
		// 		}
		// 	}
		// 	Button {
		// 		text: qsTr("Share invitation")
		// 		icon.source: AppIcons.shareNetwork
		// 		color: DefaultStyle.main2_400
		// 		Layout.preferredWidth: 206 * DefaultStyle.dp
		// 		Layout.preferredHeight: 47 * DefaultStyle.dp
		// 	}
		// }

