/****************************************************************************
**
** 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 QtSensors 5.12
import GeneralMagic 2.0

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Sensors example")

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

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

        updater.autoApplyWhenReady = true;
        updater.update();
        let types = QmlSensors.sensorTypes();
        console.log("Available sensors: " + types.join(", "));

        let currentdata = new Date();
        let timestamp = currentdata.getTime();
        ServicesManager.dataSource.pushCompassData(0, DataSource.CompassAccuracy.High, timestamp);
    }

    Magnetometer {
        active: true
        dataRate: 250
        skipDuplicates: true
        onReadingChanged: ServicesManager.dataSource.pushMagnetometerData(reading.x, reading.y, reading.z, reading.timestamp);
    }

    Gyroscope {
        active: true
        dataRate: 250
        skipDuplicates: true
        onReadingChanged: ServicesManager.dataSource.pushGyroscopeData(reading.x, reading.y, reading.z, reading.timestamp);
    }

    Compass {
        active: true
        dataRate: 250
        skipDuplicates: true
        onReadingChanged: ServicesManager.dataSource.pushCompassData(reading.azimuth,
                                                                     reaing.calibrationLevel < 0.33 ? DataSource.CompassAccuracy.Low
                                                                                                    : reaing.calibrationLevel < 0.66 ? DataSource.CompassAccuracy.Medium
                                                                                                                                     : DataSource.CompassAccuracy.High,
                                                                     reading.timestamp);
    }

    MapView {
        id: map
        anchors.fill: parent
        viewAngle: 25
        zoomLevel: 69
        viewPerspective: MapView.ViewPerspective.View3D
        buildingsVisibility: MapView.BuildingsVisibility.Show3D
        detailsQualityLevel: MapView.DetailsQualityLevel.Medium
        gestures: MapView.Gesture.Pan | MapView.Gesture.PanEnableVelocity | MapView.Gesture.Pinch | MapView.Gesture.Rotate | MapView.Gesture.Tilt
    }
}
//! [MapView code]
