import QtQuick
import QtQuick.Layouts as Layout
import QtQuick.Effects
import QtQml.Models
import QtQuick.Controls 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
	readonly property var callState: call && call.core.state || undefined
	property int conferenceLayout: call && call.core.conferenceVideoLayout || 0
	// property int participantDeviceCount: conference ? conference.core.participantDeviceCount : -1
	// onParticipantDeviceCountChanged: {
		// setConferenceLayout()
	// }
	Component.onCompleted: setConferenceLayout()
	onConferenceLayoutChanged: {
		console.log("CallLayout change : " +conferenceLayout)
		setConferenceLayout()
	}
	onCallStateChanged: {
		if( callState === LinphoneEnums.CallState.Error) {
			centerLayout.currentIndex = 1
		} 
		// else if( callState === LinphoneEnums.CallState.End) {
			// callTerminatedText.visible = true
		// }
	}
	// onCallChanged: callTerminatedText.visible = false

	function setConferenceLayout() {
		callLayout.sourceComponent = undefined	// unload old view before opening the new view to avoid conflicts in Video UI.
		callLayout.sourceComponent = mainItem.conferenceLayout == LinphoneEnums.ConferenceLayout.ActiveSpeaker
			? activeSpeakerComponent
			: gridComponent
	}

	Text {
		id: callTerminatedText
		anchors.horizontalCenter: parent.horizontalCenter
		anchors.top: parent.top
		anchors.topMargin: 25 * DefaultStyle.dp
		z: 1
		visible: callState === LinphoneEnums.CallState.End
		text: mainItem.conference 
			? qsTr("Vous avez quitté la conférence")
			: mainItem.callTerminatedByUser 
				? qsTr("Vous avez terminé l'appel") 
				: qsTr("Votre correspondant a terminé l'appel")
		color: DefaultStyle.grey_0
		font {
			pixelSize: 22 * DefaultStyle.dp
			weight: 300 * DefaultStyle.dp
		}
	}
	
	Layout.StackLayout {
		id: centerLayout
		currentIndex: 0
		anchors.fill: parent
		Loader{
			id: callLayout
			Layout.Layout.fillWidth: true
			Layout.Layout.fillHeight: true
			sourceComponent: mainItem.participantDeviceCount === 0
				? waitingForOthersComponent
				: activeSpeakerComponent
		}
		Layout.ColumnLayout {
			id: userNotFoundLayout
			Layout.Layout.preferredWidth: parent.width
			Layout.Layout.preferredHeight: parent.height
			Layout.Layout.alignment: Qt.AlignCenter
			Text {
				text: mainItem.call ? mainItem.call.core.lastErrorMessage : ""
				Layout.Layout.alignment: Qt.AlignCenter
				color: DefaultStyle.grey_0
				font.pixelSize: 40 * DefaultStyle.dp
			}
		}
	}
	Component{
		id: activeSpeakerComponent
		ActiveSpeakerLayout{
			Layout.Layout.fillWidth: true
			Layout.Layout.fillHeight: true
			call: mainItem.call
		}
	}
	Component{
		id: gridComponent
		GridLayout{
			Layout.Layout.fillWidth: true
			Layout.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 {
		// 		inversedColors: true
		// 		text: qsTr("Share invitation")
		// 		icon.source: AppIcons.shareNetwork
		// 		color: DefaultStyle.main2_400
		// 		Layout.preferredWidth: 206 * DefaultStyle.dp
		// 		Layout.preferredHeight: 47 * DefaultStyle.dp
		// 	}
		// }

