/****************************************************************************
**
** Copyright (C) 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
** Copyright (C) 2019-2022 General Magic B.V., info@generalmagic.com
**
** BSD License Usage
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**   * Redistributions of source code must retain the above copyright
**     notice, this list of conditions and the following disclaimer.
**   * Redistributions in binary form must reproduce the above copyright
**     notice, this list of conditions and the following disclaimer in
**     the documentation and/or other materials provided with the
**     distribution.
**   * Neither the name of Klarälvdalens Datakonsult AB nor the names of
**     its contributors may be used to endorse or promote products derived
**     from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
****************************************************************************/

//! [MapView code]
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.3
import GeneralMagic 2.0

Window {
    id: applicationWindow
    visible: true
    width: 800
    height: 600
    title: qsTr("Content Download")

    property var updater: ServicesManager.contentUpdater(ContentItem.Type.RoadMap)
    Component.onCompleted: {
        //! [Set token safely]
        ServicesManager.settings.token = __my_secret_token;
        //! [Set token safely]

        ServicesManager.settings.allowInternetConnection = true; // enable connection to online services

        updater.autoApplyWhenReady = true;
        updater.update();
    }

    Connections {
        target: updater
        onFinished: {
            if (result === GeneralMagic.Result.Ok || result === GeneralMagic.Result.UpToDate)
                contentStore.update();
            else
                console.error("Content update failed");
        }
    }

    ContentStore {
        id: contentStore
        type: content.type
        onStatusChanged: {
            console.log("Status = " +status)
        }
    }

    ToolButton {
        id: toolButton
        text: stackView.depth > 1 ? "\u25C0" : ""
        font.pixelSize: Qt.application.font.pixelSize * 1.6
        onClicked: {
            if (stackView.depth > 1)
                stackView.pop()
        }
    }

    StackView {
        id: stackView
        anchors.fill: parent
        initialItem:  ColumnLayout {
            enabled: !busyIndicator.running
            RowLayout {
                spacing: 10
                Layout.margins: 10
                Label {
                    text: "Catalog"
                }

                ComboBox {
                    id: content
                    Layout.minimumWidth: 230
                    textRole: "text"
                    editable: false
                    property int type: ContentItem.Type.RoadMap
                    model: [
                        { value: ContentItem.Type.RoadMap, text: qsTr("Road Maps") },
                        { value: ContentItem.Type.HumanVoice, text: qsTr("Human Voice") },
                        { value: ContentItem.Type.ComputerVoice, text: qsTr("Computer Voice") },
                        { value: ContentItem.Type.ViewStyleNormalDPI, text: qsTr("View Style Normal DPI") },
                        { value: ContentItem.Type.ViewStyleHighDPI, text: qsTr("View Style High DPI") },
                        { value: ContentItem.Type.CarModel, text: qsTr("Car Model") },
                        { value: ContentItem.Type.Unknown, text: qsTr("Unknown") }
                    ]
                    onCurrentIndexChanged: {
                        type = model[currentIndex].value
                    }
                }
                Button {
                    visible: contentStore.status != GeneralMagic.Result.Ok
                    text: "Update failed, refresh?"
                    onClicked: contentStore.update()
                }
            }

            Content {
                Layout.fillHeight: true
                Layout.fillWidth: true
            }
        }
    }

    BusyIndicator {
        id: busyIndicator
        z: 1
        anchors.fill: parent
        visible: !ServicesManager.settings.connected || contentStore.updating || updater.status !== ContentUpdater.Status.Complete
        running: visible
    }
}
