import QtQuick          2.3
import QtQuick.Controls 1.2
import QtQuick.Layouts  1.2

import QGroundControl                   1.0
import QGroundControl.ScreenTools       1.0
import QGroundControl.Vehicle           1.0
import QGroundControl.Controls          1.0
import QGroundControl.FactControls      1.0
import QGroundControl.Palette           1.0
import QGroundControl.SettingsManager   1.0
import QGroundControl.Controllers       1.0

// Editor for Mission Settings
Rectangle {
    id:                 valuesRect
    width:              availableWidth
    height:             valuesColumn.height + (_margin * 2)
    color:              qgcPal.windowShadeDark
    visible:            missionItem.isCurrentItem
    radius:             _radius

    property var    _masterControler:               masterController
    property var    _missionController:             _masterControler.missionController
    property var    _missionVehicle:                _masterControler.controllerVehicle
    property bool   _vehicleHasHomePosition:        _missionVehicle.homePosition.isValid
    property bool   _offlineEditing:                _missionVehicle.isOfflineEditingVehicle
    property bool   _showOfflineVehicleCombos:      _multipleFirmware
    property bool   _enableOfflineVehicleCombos:    _offlineEditing && _noMissionItemsAdded
    property bool   _showCruiseSpeed:               !_missionVehicle.multiRotor
    property bool   _showHoverSpeed:                _missionVehicle.multiRotor || _missionVehicle.vtol
    property bool   _multipleFirmware:              QGroundControl.supportedFirmwareCount > 2
    property real   _fieldWidth:                    ScreenTools.defaultFontPixelWidth * 16
    property bool   _mobile:                        ScreenTools.isMobile
    property var    _savePath:                      QGroundControl.settingsManager.appSettings.missionSavePath
    property var    _fileExtension:                 QGroundControl.settingsManager.appSettings.missionFileExtension
    property var    _appSettings:                   QGroundControl.settingsManager.appSettings
    property bool   _waypointsOnlyMode:             QGroundControl.corePlugin.options.missionWaypointsOnly
    property bool   _showCameraSection:             !_waypointsOnlyMode || QGroundControl.corePlugin.showAdvancedUI

    readonly property string _firmwareLabel:    qsTr("Firmware")
    readonly property string _vehicleLabel:     qsTr("Vehicle")
    readonly property real  _margin:            ScreenTools.defaultFontPixelWidth / 2

    QGCPalette { id: qgcPal }
    QGCFileDialogController { id: fileController }

    Column {
        id:                 valuesColumn
        anchors.margins:    _margin
        anchors.left:       parent.left
        anchors.right:      parent.right
        anchors.top:        parent.top
        spacing:            _margin

        Column {
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin

            GridLayout {
                anchors.left:   parent.left
                anchors.right:  parent.right
                columnSpacing:  ScreenTools.defaultFontPixelWidth
                rowSpacing:     columnSpacing
                columns:        2

                QGCLabel {
                    text:       qsTr("Waypoint alt")
                }
                FactTextField {
                    fact:               QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude
                    Layout.fillWidth:   true
                }

                QGCCheckBox {
                    id:         flightSpeedCheckBox
                    text:       qsTr("Flight speed")
                    visible:    !_missionVehicle.vtol
                    checked:    missionItem.speedSection.specifyFlightSpeed
                    onClicked:   missionItem.speedSection.specifyFlightSpeed = checked
                }
                FactTextField {
                    Layout.fillWidth:   true
                    fact:               missionItem.speedSection.flightSpeed
                    visible:            flightSpeedCheckBox.visible
                    enabled:            flightSpeedCheckBox.checked
                }
            } // GridLayout
        }

        CameraSection {
            id:         cameraSection
            checked:    missionItem.cameraSection.settingsSpecified
            visible:    _showCameraSection
        }

        QGCLabel {
            anchors.left:           parent.left
            anchors.right:          parent.right
            text:                   qsTr("Above camera commands will take affect immediately upon mission start.")
            wrapMode:               Text.WordWrap
            horizontalAlignment:    Text.AlignHCenter
            font.pointSize:         ScreenTools.smallFontPointSize
            visible:                _showCameraSection && cameraSection.checked
        }

        SectionHeader {
            id:         missionEndHeader
            text:       qsTr("Mission End")
            checked:    true
        }

        Column {
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin
            visible:        missionEndHeader.checked

            QGCCheckBox {
                text:       qsTr("Return To Launch")
                checked:    missionItem.missionEndRTL
                onClicked:  missionItem.missionEndRTL = checked
            }
        }


        SectionHeader {
            id:         vehicleInfoSectionHeader
            text:       qsTr("Vehicle Info")
            visible:    _offlineEditing && !_waypointsOnlyMode
            checked:    false
        }

        GridLayout {
            anchors.left:   parent.left
            anchors.right:  parent.right
            columnSpacing:  ScreenTools.defaultFontPixelWidth
            rowSpacing:     columnSpacing
            columns:        2
            visible:        vehicleInfoSectionHeader.visible && vehicleInfoSectionHeader.checked

            QGCLabel {
                text:               _firmwareLabel
                Layout.fillWidth:   true
                visible:            _showOfflineVehicleCombos
            }
            FactComboBox {
                fact:                   QGroundControl.settingsManager.appSettings.offlineEditingFirmwareType
                indexModel:             false
                Layout.preferredWidth:  _fieldWidth
                visible:                _showOfflineVehicleCombos
                enabled:                _enableOfflineVehicleCombos
            }

            QGCLabel {
                text:               _vehicleLabel
                Layout.fillWidth:   true
                visible:            _showOfflineVehicleCombos
            }
            FactComboBox {
                fact:                   QGroundControl.settingsManager.appSettings.offlineEditingVehicleType
                indexModel:             false
                Layout.preferredWidth:  _fieldWidth
                visible:                _showOfflineVehicleCombos
                enabled:                _enableOfflineVehicleCombos
            }

            QGCLabel {
                text:               qsTr("Cruise speed")
                visible:            _showCruiseSpeed
                Layout.fillWidth:   true
            }
            FactTextField {
                fact:                   QGroundControl.settingsManager.appSettings.offlineEditingCruiseSpeed
                visible:                _showCruiseSpeed
                Layout.preferredWidth:  _fieldWidth
            }

            QGCLabel {
                text:               qsTr("Hover speed")
                visible:            _showHoverSpeed
                Layout.fillWidth:   true
            }
            FactTextField {
                fact:                   QGroundControl.settingsManager.appSettings.offlineEditingHoverSpeed
                visible:                _showHoverSpeed
                Layout.preferredWidth:  _fieldWidth
            }
        } // GridLayout

        SectionHeader {
            id:         plannedHomePositionSection
            text:       qsTr("Planned Home Position")
            visible:    !_vehicleHasHomePosition
            checked:    false
        }

        Column {
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin
            visible:        plannedHomePositionSection.checked && !_vehicleHasHomePosition

            GridLayout {
                anchors.left:   parent.left
                anchors.right:  parent.right
                columnSpacing:  ScreenTools.defaultFontPixelWidth
                rowSpacing:     columnSpacing
                columns:        2

                QGCLabel {
                    text: qsTr("Altitude")
                }
                FactTextField {
                    fact:               missionItem.plannedHomePositionAltitude
                    Layout.fillWidth:   true
                }
            }

            QGCLabel {
                width:                  parent.width
                wrapMode:               Text.WordWrap
                font.pointSize:         ScreenTools.smallFontPointSize
                text:                   qsTr("Actual position set by vehicle at flight time.")
                horizontalAlignment:    Text.AlignHCenter
            }

            QGCButton {
                text:                       qsTr("Set Home To Map Center")
                onClicked:                  missionItem.coordinate = map.center
                anchors.horizontalCenter:   parent.horizontalCenter
            }
        }
    } // Column
} // Rectangle
