/**
    Copyright 2016 Bill Binder <dxtwjb@gmail.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.1
import QtQuick.Controls 1.2 as QtControls
import QtQuick.Layouts 1.2 as QtLayouts
import QtQuick.Dialogs 1.0 as QtDialogs

import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.core 2.0 as PlasmaCore


Item {
    id: generalPage

    property alias cfg_latitudeAuto: latitudeAuto.checked  // 0=Equator, +90=North Pole, -90=South Pole
    property alias cfg_latitude: latitude.value  // 0=Equator, +90=North Pole, -90=South Pole
    property alias cfg_transparentShadow: transparentShadow.checked  // boolean
    property alias cfg_showBackground: showBackground.checked  // boolean
    property alias cfg_dateFormat: dateFormat.currentIndex // code: 0= 1= 2=...
    property alias cfg_dateFormatString: dateFormatString.text
    property alias cfg_diskColour: diskColour.color

    property int cfg_lunarIndex: 0        // index into imageChoices
    property string cfg_lunarImage: ''    // filename (from imageChoices)
    property int cfg_lunarImageTweak: 0   // rotation angle adjustment for the image (from imageChoices)

    property alias cfg_showGrid: showGrid.checked
    property alias cfg_showTycho: showTycho.checked
    property alias cfg_showCopernicus: showCopernicus.checked

    onCfg_lunarIndexChanged: {
        cfg_lunarImage = imageChoices.get(cfg_lunarIndex).filename
        cfg_lunarImageTweak = imageChoices.get(cfg_lunarIndex).tweak
        if (cfg_lunarImage == '') {
            cfg_transparentShadow = false  //transparentShadow does not work with diskColour
        }
    }

    onCfg_latitudeAutoChanged: {
        if (cfg_latitudeAuto) {
            cfg_latitude = geoSource.data.location.latitude
        }
    }

    ImageChoices {
        id: imageChoices
    }

    PlasmaCore.DataSource {
        id: geoSource
        engine: "geolocation"
        connectedSources: ["location"]
        interval: 3600 * 1000

        onNewData:{
            lbl_place.text = i18n(geoSource.data.location.country)
        }
    }

    QtDialogs.ColorDialog {
        id: colorDialog
        title: i18n("Pick a colour for the moon")
        visible: false

        onAccepted: {
            diskColour.color = colorDialog.color
        }
    }

    QtLayouts.GridLayout {
        columns: 2
        rowSpacing: 15

        QtControls.Label {
            text: i18n("Preview")
        }
        QtLayouts.RowLayout {
            spacing: 20

            PlasmaComponents.ToolButton {
                id: previousButton
                iconSource: "go-previous"
                enabled: cfg_lunarIndex > 0
                onClicked: {
                    cfg_lunarIndex -= 1
                }
            }

            LunaIcon {
              id: lunaPreview
              width: 200
              height: 200
              latitude: cfg_latitude
              showShadow: false
              transparentShadow: false
              lunarImage: cfg_lunarImage
              lunarImageTweak: cfg_lunarImageTweak
              diskColour: cfg_diskColour
              showGrid: cfg_showGrid
              showTycho: cfg_showTycho
              showCopernicus: cfg_showCopernicus
            }

            PlasmaComponents.ToolButton {
                id: nextButton
                iconSource: "go-next"
                enabled: cfg_lunarIndex < imageChoices.count-1
                onClicked: {
                    cfg_lunarIndex += 1
                }
            }

            QtLayouts.ColumnLayout {
                spacing: 20

                QtControls.CheckBox {
                    id: showGrid
                    text: i18n("Show grid")
                }

                QtControls.CheckBox {
                    id: showTycho
                    text: i18n("Tycho")
                }

                QtControls.CheckBox {
                    id: showCopernicus
                    text: i18n("Copernicus")
                }

            }
        }

        QtControls.Label {
            text: i18n("Disk Colour")
            visible: cfg_lunarImage === ""
        }
        Rectangle {
            id: diskColour
            width: 50
            height: 50
            color: '#808040'
            border.color: '#000000'
            radius: height/2
            visible: cfg_lunarImage === ""

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    colorDialog.color = diskColour.color
                    colorDialog.visible = true
                }
            }
        }

        QtControls.Label {
            text: i18n("Latitude")
        }
        QtLayouts.RowLayout {
            spacing: 20

            QtControls.Label {
                id: lbl_latitude
                text: Math.abs(latitude.value) + "ยบ " + (latitude.value < 0 ? "S" : "N")
                QtLayouts.Layout.preferredWidth: 40
                horizontalAlignment: Text.AlignRight
            }

            QtControls.Slider {
                id: latitude
                QtLayouts.Layout.fillWidth: true
                minimumValue: -90.0
                maximumValue: 90.0
                stepSize: 5.0
                tickmarksEnabled: true
                enabled: !cfg_latitudeAuto
            }
        }
        QtControls.Label {
            text: i18n("")
        }
        QtLayouts.RowLayout {
            spacing: 20
            QtControls.CheckBox {
                id: latitudeAuto
                text: i18n("Use current latitude")
            }
            QtControls.Label {
                id: lbl_place
                QtLayouts.Layout.fillWidth: true
                horizontalAlignment: Text.AlignRight
            }
        }

        QtControls.Label {
            text: i18n("Date Format")
        }
        QtControls.ComboBox {
            id: dateFormat
            QtLayouts.Layout.fillWidth: true
            textRole: "key"
            model: ListModel {
                dynamicRoles: true
                Component.onCompleted: {
                append({ key: i18n("Text date"), value: 0 })
                append({ key: i18n("Short date"), value: 1 })
                append({ key: i18n("Long date"), value: 2 })
                append({ key: i18n("ISO date"), value: 3 })
                append({ key: i18n("Custom"), value: 4 })
                }
            }
        }

        QtControls.Label {
            text: i18n("Date Format String")
            visible: dateFormat.currentIndex == 4
        }
        QtControls.TextField {
            id: dateFormatString
            maximumLength: 24
            visible: dateFormat.currentIndex == 4
        }
        QtControls.Label {
            text: i18n("Background")
        }
        QtControls.CheckBox {
            id: showBackground
            text: i18n("Show background")
        }
        QtControls.Label {
            text: ""
        }
        QtControls.CheckBox {
            id: transparentShadow
            text: i18n("Transparent shadow")
            enabled: cfg_lunarImage != ""
        }
    }
}