/*
 * Copyright (C) 2019-2020 by Savoir-faire Linux
 * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import QtQuick 2.15
import QtQuick.Window 2.14
import QtQuick.Controls 2.14
import QtQuick.Controls.Universal 2.12
import QtQuick.Layouts 1.3
import QtGraphicalEffects 1.14
import net.jami.Models 1.0

import "../../commoncomponents"

Rectangle {
    id: sipAccountViewRect
    signal navigateToMainView
    signal navigateToNewWizardView
    signal backArrowClicked

    property int preferredColumnWidth : sipAccountViewRect.width / 2 - 50

    function updateAccountInfoDisplayed() {
        displaySIPNameLineEdit.text = ClientWrapper.settingsAdaptor.getCurrentAccount_Profile_Info_Alias()
        usernameSIP.text = ClientWrapper.settingsAdaptor.getAccountConfig_Username()
        hostnameSIP.text = ClientWrapper.settingsAdaptor.getAccountConfig_Hostname()
        passSIPlineEdit.text = ClientWrapper.settingsAdaptor.getAccountConfig_Password()
        proxySIP.text = ClientWrapper.settingsAdaptor.getAccountConfig_ProxyServer()

        accountSIPEnableCheckBox.checked = ClientWrapper.settingsAdaptor.get_CurrentAccountInfo_Enabled()

        setAvatar()

        if (advanceSIPSettingsView.visible) {
            advanceSIPSettingsView.updateAccountInfoDisplayedAdvanceSIP()
        }
    }

    function isPhotoBoothOpened() {
        return currentSIPAccountAvatar.takePhotoState
    }

    function setAvatar() {
        currentSIPAccountAvatar.setAvatarPixmap(
                    ClientWrapper.settingsAdaptor.getAvatarImage_Base64(
                        currentSIPAccountAvatar.boothWidth),
                    ClientWrapper.settingsAdaptor.getIsDefaultAvatar())
    }

    function stopBooth() {
        currentSIPAccountAvatar.stopBooth()
    }

    // slots
    function setAccEnableSlot(state) {
        ClientWrapper.accountModel.setAccountEnabled(ClientWrapper.utilsAdaptor.getCurrAccId(), state)
    }

    function delAccountSlot() {
        deleteAccountDialog_SIP.open()
    }

    DeleteAccountDialog{
        id: deleteAccountDialog_SIP

        anchors.centerIn: parent.Center
        x: (parent.width - width) / 2
        y: (parent.height - height) / 2

        onAccepted: {
            ClientWrapper.accountAdaptor.setSelectedConvId()

            if(ClientWrapper.utilsAdaptor.getAccountListSize() > 0){
                navigateToMainView()
            } else {
                navigateToNewWizardView()
            }
        }
    }

    Layout.fillHeight: true
    Layout.maximumWidth: JamiTheme.maximumWidthSettingsView
    anchors.centerIn: parent

    ColumnLayout {
        anchors.fill: sipAccountViewRect

        RowLayout {
            id: sipAccountPageTitle
            Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
            Layout.leftMargin: JamiTheme.preferredMarginSize
            Layout.fillWidth: true
            Layout.maximumHeight: 64
            Layout.minimumHeight: 64
            Layout.preferredHeight: 64

            HoverableButton {
                id: backToSettingsMenuButton

                Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
                Layout.preferredWidth: JamiTheme.preferredFieldHeight
                Layout.preferredHeight: JamiTheme.preferredFieldHeight
                Layout.rightMargin: JamiTheme.preferredMarginSize

                radius: 32
                source: "qrc:/images/icons/ic_arrow_back_24px.svg"
                backgroundColor: "white"
                onExitColor: "white"

                toolTipText: qsTr("Toggle to display side panel")
                hoverEnabled: true
                visible: mainViewWindow.sidePanelHidden

                onClicked: {
                    backArrowClicked()
                }
            }

            ElidedTextLabel {
                Layout.fillWidth: true
                Layout.maximumHeight: JamiTheme.preferredFieldHeight
                Layout.preferredHeight: JamiTheme.preferredFieldHeight
                Layout.minimumHeight: JamiTheme.preferredFieldHeight

                eText: qsTr("Account Settings")
                fontSize: JamiTheme.titleFontSize
                maxWidth: !backToSettingsMenuButton.visible ? sipAccountViewRect.width - 100 :
                                                              sipAccountViewRect.width - backToSettingsMenuButton.width - 100

            }
        }

        ScrollView {
            id: sipAccountScrollView

            property ScrollBar vScrollBar: ScrollBar.vertical

            Layout.fillHeight: true
            Layout.fillWidth: true
            Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter

            width: sipAccountViewRect.width
            height: sipAccountViewRect.height - sipAccountPageTitle.height

            ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
            ScrollBar.vertical.policy: ScrollBar.AsNeeded

            clip: true

            ColumnLayout {
                id: accountSIPLayout

                Layout.fillHeight: true
                Layout.preferredWidth: sipAccountViewRect.width
                Layout.alignment: Qt.AlignHCenter

                spacing: 24

                ToggleSwitch {
                    id: accountSIPEnableCheckBox

                    Layout.topMargin: JamiTheme.preferredMarginSize
                    Layout.leftMargin: JamiTheme.preferredMarginSize

                    labelText: qsTr("Enable")
                    fontPointSize: JamiTheme.headerFontSize

                    onSwitchToggled: {
                        setAccEnableSlot(checked)
                    }
                }

                ColumnLayout {
                    Layout.fillWidth: true
                    Layout.fillHeight: true
                    Layout.leftMargin: JamiTheme.preferredMarginSize
                    spacing: 8

                    Label {
                        Layout.fillWidth: true

                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
                        Layout.minimumHeight: JamiTheme.preferredFieldHeight

                        text: qsTr("Profile")
                        font.pointSize: JamiTheme.headerFontSize
                        font.kerning: true

                        horizontalAlignment: Text.AlignLeft
                        verticalAlignment: Text.AlignVCenter
                    }

                    PhotoboothView {
                        id: currentSIPAccountAvatar

                        Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter

                        boothWidth: Math.min(224, sipAccountViewRect.width - 100)

                        Layout.maximumWidth: boothWidth+50
                        Layout.preferredWidth: boothWidth+50
                        Layout.minimumWidth: boothWidth+50
                        Layout.maximumHeight: boothWidth+50
                        Layout.preferredHeight: boothWidth+50
                        Layout.minimumHeight: boothWidth+50

                        onImageAcquired: {
                            ClientWrapper.settingsAdaptor.setCurrAccAvatar(imgBase64)
                        }

                        onImageCleared: {
                            ClientWrapper.settingsAdaptor.clearCurrentAvatar()
                            setAvatar()
                        }
                    }

                    MaterialLineEdit {
                        id: displaySIPNameLineEdit

                        Layout.maximumWidth: JamiTheme.preferredFieldWidth
                        Layout.minimumHeight: JamiTheme.preferredFieldHeight
                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
                        Layout.maximumHeight: JamiTheme.preferredFieldHeight

                        Layout.alignment: Qt.AlignHCenter

                        font.pointSize: JamiTheme.textFontSize
                        font.kerning: true

                        horizontalAlignment: Text.AlignHCenter
                        verticalAlignment: Text.AlignVCenter
                        padding: 8

                        onEditingFinished: {
                            ClientWrapper.accountAdaptor.setCurrAccDisplayName(
                                        displaySIPNameLineEdit.text)
                        }
                    }
                }


                ColumnLayout {
                    Layout.fillWidth: true
                    Layout.alignment: Qt.AlignHCenter
                    Layout.leftMargin: JamiTheme.preferredMarginSize
                    spacing: 8

                    ElidedTextLabel {
                        Layout.fillWidth: true

                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
                        Layout.minimumHeight: JamiTheme.preferredFieldHeight

                        eText: qsTr("Identity")
                        maxWidth: sipAccountViewRect.width - 72
                        fontSize: JamiTheme.headerFontSize
                    }


                    GridLayout {
                        rows: 4
                        columns: 2
                        flow: GridLayout.LeftToRight
                        rowSpacing: 8
                        columnSpacing: 6

                        Layout.fillWidth: true
                        Layout.leftMargin: JamiTheme.preferredMarginSize

                        // user name
                        ElidedTextLabel {
                            Layout.fillWidth: true
                            Layout.maximumHeight: JamiTheme.preferredFieldHeight
                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
                            Layout.minimumHeight: JamiTheme.preferredFieldHeight

                            eText: qsTr("Username")
                            fontSize: JamiTheme.settingsFontSize
                            maxWidth: preferredColumnWidth
                        }

                        MaterialLineEdit {
                            id: usernameSIP

                            fieldLayoutWidth: preferredColumnWidth

                            font.pointSize: JamiTheme.settingsFontSize // Albert: buttonSize?
                            font.kerning: true

                            horizontalAlignment: Text.AlignLeft
                            verticalAlignment: Text.AlignVCenter

                            Layout.maximumWidth: preferredColumnWidth
                            Layout.minimumHeight: JamiTheme.preferredFieldHeight
                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
                            Layout.maximumHeight: JamiTheme.preferredFieldHeight
                            padding: 8

                            onEditingFinished: {
                                ClientWrapper.settingsAdaptor.setAccountConfig_Username(
                                            usernameSIP.text)
                            }
                        }

                        // host name
                        ElidedTextLabel {
                            Layout.fillWidth: true
                            Layout.maximumHeight: JamiTheme.preferredFieldHeight
                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
                            Layout.minimumHeight: JamiTheme.preferredFieldHeight

                            eText: qsTr("Hostname")
                            fontSize: JamiTheme.settingsFontSize
                            maxWidth: preferredColumnWidth
                        }

                        MaterialLineEdit {
                            id: hostnameSIP

                            fieldLayoutWidth: preferredColumnWidth

                            font.pointSize: JamiTheme.settingsFontSize
                            font.kerning: true

                            horizontalAlignment: Text.AlignLeft
                            verticalAlignment: Text.AlignVCenter

                            Layout.maximumWidth: preferredColumnWidth
                            Layout.minimumHeight: JamiTheme.preferredFieldHeight
                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
                            Layout.maximumHeight: JamiTheme.preferredFieldHeight
                            padding: 8

                            onEditingFinished: {
                                ClientWrapper.settingsAdaptor.setAccountConfig_Hostname(
                                            hostnameSIP.text)
                            }
                        }

                        // proxy
                        ElidedTextLabel {
                            Layout.fillWidth: true
                            Layout.maximumHeight: JamiTheme.preferredFieldHeight
                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
                            Layout.minimumHeight: JamiTheme.preferredFieldHeight

                            text: qsTr("Proxy")
                            font.pointSize: JamiTheme.settingsFontSize
                            maxWidth: preferredColumnWidth
                        }

                        MaterialLineEdit {
                            id: proxySIP

                            fieldLayoutWidth: preferredColumnWidth

                            font.pointSize: JamiTheme.settingsFontSize // Albert
                            font.kerning: true

                            horizontalAlignment: Text.AlignLeft
                            verticalAlignment: Text.AlignVCenter

                            Layout.maximumWidth: preferredColumnWidth
                            Layout.minimumHeight: JamiTheme.preferredFieldHeight
                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
                            Layout.maximumHeight: JamiTheme.preferredFieldHeight
                            padding: 8

                            onEditingFinished: {
                                ClientWrapper.settingsAdaptor.setAccountConfig_ProxyServer(
                                            proxySIP.text)
                            }
                        }

                        // password
                        ElidedTextLabel {
                            Layout.fillWidth: true
                            Layout.maximumHeight: JamiTheme.preferredFieldHeight
                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
                            Layout.minimumHeight: JamiTheme.preferredFieldHeight

                            eText: qsTr("Password")
                            fontSize: JamiTheme.settingsFontSize
                            maxWidth: preferredColumnWidth
                        }

                        MaterialLineEdit {
                            id: passSIPlineEdit

                            fieldLayoutWidth: preferredColumnWidth

                            font.pointSize: JamiTheme.settingsFontSize
                            font.kerning: true

                            echoMode: TextInput.Password
                            horizontalAlignment: Text.AlignLeft
                            verticalAlignment: Text.AlignVCenter

                            Layout.maximumWidth: preferredColumnWidth
                            Layout.minimumHeight: JamiTheme.preferredFieldHeight
                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
                            Layout.maximumHeight: JamiTheme.preferredFieldHeight
                            padding: 8

                            onEditingFinished: {
                                ClientWrapper.settingsAdaptor.setAccountConfig_Password(
                                            passSIPlineEdit.text)
                            }
                        }
                    }


                    MaterialButton {
                        color: JamiTheme.buttonTintedRed
                        hoveredColor: JamiTheme.buttonTintedRedHovered
                        pressedColor: JamiTheme.buttonTintedRedPressed

                        Layout.alignment: Qt.AlignHCenter

                        Layout.minimumWidth: JamiTheme.preferredFieldWidth
                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
                        Layout.maximumWidth: JamiTheme.preferredFieldWidth
                        Layout.minimumHeight: JamiTheme.preferredFieldHeight
                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
                        Layout.maximumHeight: JamiTheme.preferredFieldHeight

                        toolTipText: qsTr("Press this button to delete this account")
                        text: qsTr("Delete Account")

                        source: "qrc:/images/icons/delete_forever-24px.svg"

                        onClicked: {
                            delAccountSlot()
                        }
                    }
                }

                RowLayout {
                    id: rowAdvancedSettingsBtn
                    Layout.fillWidth: true
                    Layout.leftMargin: JamiTheme.preferredMarginSize

                    ElidedTextLabel {

                        id: lblAdvancedAccountSettings

                        Layout.fillWidth: true
                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
                        Layout.minimumHeight: JamiTheme.preferredFieldHeight

                        eText: qsTr("Advanced Account Settings")
                        fontSize: JamiTheme.headerFontSize
                        maxWidth: sipAccountViewRect.width - advancedAccountSettingsSIPButton.width - 80
                    }

                    HoverableRadiusButton {
                        id: advancedAccountSettingsSIPButton

                        Layout.leftMargin: JamiTheme.preferredMarginSize

                        Layout.minimumWidth: JamiTheme.preferredFieldHeight
                        Layout.preferredWidth: JamiTheme.preferredFieldHeight
                        Layout.maximumWidth: JamiTheme.preferredFieldHeight
                        Layout.minimumHeight: JamiTheme.preferredFieldHeight
                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
                        Layout.maximumHeight: JamiTheme.preferredFieldHeight

                        Layout.alignment: Qt.AlignHCenter

                        radius: height / 2

                        icon.source: {
                            if (advanceSIPSettingsView.visible) {
                                return "qrc:/images/icons/round-arrow_drop_up-24px.svg"
                            } else {
                                return "qrc:/images/icons/round-arrow_drop_down-24px.svg"
                            }
                        }

                        onClicked: {
                            advanceSIPSettingsView.visible = !advanceSIPSettingsView.visible
                            if(advanceSIPSettingsView.visible){
                                advanceSIPSettingsView.updateAccountInfoDisplayedAdvanceSIP()
                                sipAccountScrollView.vScrollBar.position  = rowAdvancedSettingsBtn.y / accountSIPLayout.height
                            } else {
                                sipAccountScrollView.vScrollBar.position = 0
                            }
                        }
                    }
                }

                // instantiate advance setting page
                AdvancedSIPSettingsView {
                    id: advanceSIPSettingsView
                    Layout.leftMargin: JamiTheme.preferredMarginSize
                    visible: false
                }

                Item {
                    Layout.preferredWidth: sipAccountViewRect.width - 32
                    Layout.minimumWidth: sipAccountViewRect.width - 32
                    Layout.maximumWidth: JamiTheme.maximumWidthSettingsView - 32
                    Layout.fillHeight: true
                }
            }
        }
    }
}
