/*!
 *
 * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved.
 * \copyright
 * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN
 * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER.
 *
 * \file SettingsBluetooth.qml
 * \author (last) Peter Lucia
 * \date (last) 23-Sept-2020
 * \author (original) Peter Lucia
 * \date (original) 23-Sept-2020
 *
 */

// Qt
import QtQuick 2.12
import QtQuick.Controls 2.12 // for scrollbar

// Project
import Gui.Actions 0.1;

//  Qml imports
import "qrc:/globals"
import "qrc:/components"

/*!
 * \brief   SettingsHome is the screen
 * which is the default screen in the "Settings" stack
 */
ScreenItem { id: _root

    signal clickedBack()

    BackButton { id : _backButton
        onClicked: {
            _root.clickedBack()
        }
    }

    property var ipValidator: RegExpValidator {
        regExp:/^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$/
    }

    TitleText { id: _title
        anchors.horizontalCenter: parent.horizontalCenter
        anchors {
            top: parent.top
            left: parent.left
            topMargin: Variables.settingsWIFIMargin
        }

        text: qsTr("Wifi Settings")
    }

    Rectangle { id: _rect
        color: Colors.transparent
        anchors {
            top: _title.bottom
            left: parent.left
            leftMargin: Variables.settingsWIFIMargin
            right: parent.right
            rightMargin: Variables.settingsWIFIMargin
            bottom: parent.bottom
            bottomMargin: 2*Variables.mainMenuHeight
        }

        TextEntry { id: _ip_address
            textInput.width: Variables.settingsWIFIInputWidth
            line.width: Variables.settingsWIFIInputWidth
            label.width: Variables.settingsWIFIInputWidth
            anchors {
                top: parent.top
                left: parent.left
            }
            validator: ipValidator
            labelText: qsTr("IP Address: ")
            textInput.text: vNetworkModel.ipAddress
            onEnterPressed: {
                console.log("IP Address: Enter pressed")
                _keyboard.setVisible(false)
            }
        }

        TextEntry { id: _gateway
            textInput.width: Variables.settingsWIFIInputWidth
            line.width: Variables.settingsWIFIInputWidth
            label.width: Variables.settingsWIFIInputWidth
            anchors {
                top: _ip_address.bottom
                topMargin: Variables.settingsWIFISpacing
                left: parent.left
            }
            validator: ipValidator
            labelText: qsTr("Gateway: ")
            textInput.text: vNetworkModel.gateway
            onEnterPressed: {
                _keyboard.setVisible(false)
            }
        }

        TextEntry { id: _subnet_mask
            textInput.width: Variables.settingsWIFIInputWidth
            line.width: Variables.settingsWIFIInputWidth
            label.width: Variables.settingsWIFIInputWidth
            anchors {
                top: _gateway.bottom
                topMargin: Variables.settingsWIFISpacing
                left: parent.left
            }
            validator: ipValidator
            labelText: qsTr("Subnet mask: ")
            textInput.text: vNetworkModel.subnetMask
            onEnterPressed: {
                _keyboard.setVisible(false)
            }
        }

        TextEntry { id: _dns
            textInput.width: Variables.settingsWIFIInputWidth
            line.width: Variables.settingsWIFIInputWidth
            label.width: Variables.settingsWIFIInputWidth
            anchors {
                top: _subnet_mask.bottom
                topMargin: Variables.settingsWIFISpacing
                left: parent.left
            }
            validator: ipValidator
            labelText: qsTr("DNS: ")
            textInput.text: vNetworkModel.dns
            onEnterPressed: {
                _keyboard.setVisible(false)
            }
        }

        TouchRect { id: _scan
            anchors {
                bottom: _rect.bottom
                bottomMargin: Variables.settingsWIFIBottomMargin
                left: _rect.left
            }

            backgroundColor: vNetworkModel.scanInProgress ? Colors.backgroundButtonNormal : Colors.backgroundButtonSelect
            textColor: vNetworkModel.scanInProgress ? "grey" : Colors.textMain
            height: Variables.settingsWIFIButtonHeight
            width: Variables.settingsWIFIButtonWidth
            text.text: qsTr("Scan")
            onClicked: {
                if (!vNetworkModel.scanInProgress)
                    vNetworkModel.doScan()
            }
        }

        NotificationBarSmall { id: _notification
            imageAutoSize: true
            height  : 25
            color: "transparent"
            imageSource : ""
            text        : vNetworkModel.status
            textColor: Colors.textMain
            textfontSize: Fonts.fontPixelTextRectExtra
            anchors {
                bottom: parent.bottom
                bottomMargin: Variables.settingsWIFIBottomMargin
            }
        }

        ListView { id: _networkList
            model: vNetworkModel
            anchors {
                top: parent.top
                bottom: parent.bottom
                bottomMargin: _notification.height + Variables.settingsWIFIBottomMargin
                right: parent.right
            }
            width: Variables.settingsWIFINetworksWidth
            clip: true
            spacing: 10

            ScrollBar.vertical: ScrollBar { id: _scrollBarPairedDevices
                anchors.right: parent.right
                anchors.rightMargin: 3
                contentItem: Rectangle {
                    color: Colors.backgroundRangeRect
                    implicitWidth: 6
                    radius: width / 2
                    width: 3
                }
            }

            delegate: TouchRect {
                id: _network
                anchors.right: parent.right
                anchors.rightMargin: Variables.settingsWIFISpacing
                height: Variables.settingsWIFINetworkHeight
                width: Variables.settingsWIFINetworkWidth
                color: Colors.backgroundMain
                border.color: Colors.borderButton
                border.width: 2
                radius: 20
                animated: true

                Text {
                    id: _ssid
                    anchors {
                        centerIn: parent
                    }
                    font.pixelSize: Fonts.fontPixelTextRectExtra
                    text: ssid
                    color: Colors.textMain
                }

                Text {
                    id: _securityLevel
                    anchors {
                        left: parent.left
                        leftMargin: 10
                        bottom: parent.bottom
                    }
                    font.pixelSize: Fonts.fontPixelDialogText
                    text: securityTypes
                    color: Colors.textMain
                }

                onClicked: {
                   console.debug("Clicked " + ssid + " with macAddress: " + macAddress);
                   if (vNetworkModel.doCheckIfConnected(macAddress)) {
                       // TODO: show alert to confirm disconnect
                   } else {
                       // initiate connection to this network, as for password
                       _joinNetwork.ssid = ssid
                       _joinNetwork.macAddress = macAddress
                       _joinNetwork.visible = true
                   }
                }
            }
        }
    }
}
