import UM 1.2 as UM
import Cura 1.0 as Cura

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Window 2.1

Cura.MachineAction
{
    anchors.fill: parent;
    Item
    {
        id: checkupMachineAction
        anchors.fill: parent;
        property int leftRow: (checkupMachineAction.width * 0.40) | 0
        property int rightRow: (checkupMachineAction.width * 0.60) | 0
        property bool heatupHotendStarted: false
        property bool heatupBedStarted: false
        property bool usbConnected: Cura.USBPrinterManager.connectedPrinterList.rowCount() > 0

        UM.I18nCatalog { id: catalog; name:"cura"}
        Label
        {
            id: pageTitle
            width: parent.width
            text: catalog.i18nc("@title", "Check Printer")
            wrapMode: Text.WordWrap
            font.pointSize: 18;
        }

        Label
        {
            id: pageDescription
            anchors.top: pageTitle.bottom
            anchors.topMargin: UM.Theme.getSize("default_margin").height
            width: parent.width
            wrapMode: Text.WordWrap
            text: catalog.i18nc("@label", "It's a good idea to do a few sanity checks on your Ultimaker. You can skip this step if you know your machine is functional");
        }

        Row
        {
            id: startStopButtons
            anchors.top: pageDescription.bottom
            anchors.topMargin: UM.Theme.getSize("default_margin").height
            anchors.horizontalCenter: parent.horizontalCenter
            width: childrenRect.width
            spacing: UM.Theme.getSize("default_margin").width
            Button
            {
                id: startCheckButton
                text: catalog.i18nc("@action:button","Start Printer Check");
                onClicked:
                {
                    checkupMachineAction.heatupHotendStarted = false;
                    checkupMachineAction.heatupBedStarted = false;
                    manager.startCheck();
                    startCheckButton.visible = false;
                }
            }
        }

        Item
        {
            id: checkupContent
            anchors.top: startStopButtons.bottom
            anchors.topMargin: UM.Theme.getSize("default_margin").height
            visible: manager.checkStarted
            width: parent.width
            height: 250
            //////////////////////////////////////////////////////////
            Label
            {
                id: connectionLabel
                width: checkupMachineAction.leftRow
                anchors.left: parent.left
                anchors.top: parent.top
                wrapMode: Text.WordWrap
                text: catalog.i18nc("@label","Connection: ")
            }
            Label
            {
                id: connectionStatus
                width: checkupMachineAction.rightRow
                anchors.left: connectionLabel.right
                anchors.top: parent.top
                wrapMode: Text.WordWrap
                text: checkupMachineAction.usbConnected ? catalog.i18nc("@info:status","Connected"): catalog.i18nc("@info:status","Not connected")
            }
            //////////////////////////////////////////////////////////
            Label
            {
                id: endstopXLabel
                width: checkupMachineAction.leftRow
                anchors.left: parent.left
                anchors.top: connectionLabel.bottom
                wrapMode: Text.WordWrap
                text: catalog.i18nc("@label","Min endstop X: ")
                visible: checkupMachineAction.usbConnected
            }
            Label
            {
                id: endstopXStatus
                width: checkupMachineAction.rightRow
                anchors.left: endstopXLabel.right
                anchors.top: connectionLabel.bottom
                wrapMode: Text.WordWrap
                text: manager.xMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
                visible: checkupMachineAction.usbConnected
            }
            //////////////////////////////////////////////////////////////
            Label
            {
                id: endstopYLabel
                width: checkupMachineAction.leftRow
                anchors.left: parent.left
                anchors.top: endstopXLabel.bottom
                wrapMode: Text.WordWrap
                text: catalog.i18nc("@label","Min endstop Y: ")
                visible: checkupMachineAction.usbConnected
            }
            Label
            {
                id: endstopYStatus
                width: checkupMachineAction.rightRow
                anchors.left: endstopYLabel.right
                anchors.top: endstopXLabel.bottom
                wrapMode: Text.WordWrap
                text: manager.yMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
                visible: checkupMachineAction.usbConnected
            }
            /////////////////////////////////////////////////////////////////////
            Label
            {
                id: endstopZLabel
                width: checkupMachineAction.leftRow
                anchors.left: parent.left
                anchors.top: endstopYLabel.bottom
                wrapMode: Text.WordWrap
                text: catalog.i18nc("@label","Min endstop Z: ")
                visible: checkupMachineAction.usbConnected
            }
            Label
            {
                id: endstopZStatus
                width: checkupMachineAction.rightRow
                anchors.left: endstopZLabel.right
                anchors.top: endstopYLabel.bottom
                wrapMode: Text.WordWrap
                text: manager.zMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
                visible: checkupMachineAction.usbConnected
            }
            ////////////////////////////////////////////////////////////
            Label
            {
                id: nozzleTempLabel
                width: checkupMachineAction.leftRow
                height: nozzleTempButton.height
                anchors.left: parent.left
                anchors.top: endstopZLabel.bottom
                wrapMode: Text.WordWrap
                text: catalog.i18nc("@label","Nozzle temperature check: ")
                visible: checkupMachineAction.usbConnected
            }
            Label
            {
                id: nozzleTempStatus
                width: (checkupMachineAction.rightRow * 0.4) | 0
                anchors.top: nozzleTempLabel.top
                anchors.left: nozzleTempLabel.right
                wrapMode: Text.WordWrap
                text: catalog.i18nc("@info:status","Not checked")
                visible: checkupMachineAction.usbConnected
            }
            Item
            {
                id: nozzleTempButton
                width: (checkupMachineAction.rightRow * 0.3) | 0
                height: childrenRect.height
                anchors.top: nozzleTempLabel.top
                anchors.left: bedTempStatus.right
                anchors.leftMargin: UM.Theme.getSize("default_margin").width/2
                visible: checkupMachineAction.usbConnected
                Button
                {
                    text: checkupMachineAction.heatupHotendStarted ? catalog.i18nc("@action:button","Stop Heating") : catalog.i18nc("@action:button","Start Heating")
                    onClicked:
                    {
                        if (checkupMachineAction.heatupHotendStarted)
                        {
                            manager.cooldownHotend()
                            checkupMachineAction.heatupHotendStarted = false
                        } else
                        {
                            manager.heatupHotend()
                            checkupMachineAction.heatupHotendStarted = true
                        }
                    }
                }
            }
            Label
            {
                id: nozzleTemp
                anchors.top: nozzleTempLabel.top
                anchors.left: nozzleTempButton.right
                anchors.leftMargin: UM.Theme.getSize("default_margin").width
                width: (checkupMachineAction.rightRow * 0.2) | 0
                wrapMode: Text.WordWrap
                text: manager.hotendTemperature + "°C"
                font.bold: true
                visible: checkupMachineAction.usbConnected
            }
            /////////////////////////////////////////////////////////////////////////////
            Label
            {
                id: bedTempLabel
                width: checkupMachineAction.leftRow
                height: bedTempButton.height
                anchors.left: parent.left
                anchors.top: nozzleTempLabel.bottom
                wrapMode: Text.WordWrap
                text: catalog.i18nc("@label","Build plate temperature check:")
                visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
            }

            Label
            {
                id: bedTempStatus
                width: (checkupMachineAction.rightRow * 0.4) | 0
                anchors.top: bedTempLabel.top
                anchors.left: bedTempLabel.right
                wrapMode: Text.WordWrap
                text: manager.bedTestCompleted ? catalog.i18nc("@info:status","Not checked"): catalog.i18nc("@info:status","Checked")
                visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
            }
            Item
            {
                id: bedTempButton
                width: (checkupMachineAction.rightRow * 0.3) | 0
                height: childrenRect.height
                anchors.top: bedTempLabel.top
                anchors.left: bedTempStatus.right
                anchors.leftMargin: UM.Theme.getSize("default_margin").width/2
                visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
                Button
                {
                    text: checkupMachineAction.heatupBedStarted ?catalog.i18nc("@action:button","Stop Heating") : catalog.i18nc("@action:button","Start Heating")
                    onClicked:
                    {
                        if (checkupMachineAction.heatupBedStarted)
                        {
                            manager.cooldownBed()
                            checkupMachineAction.heatupBedStarted = false
                        } else
                        {
                            manager.heatupBed()
                            checkupMachineAction.heatupBedStarted = true
                        }
                    }
                }
            }
            Label
            {
                id: bedTemp
                width: (checkupMachineAction.rightRow * 0.2) | 0
                anchors.top: bedTempLabel.top
                anchors.left: bedTempButton.right
                anchors.leftMargin: UM.Theme.getSize("default_margin").width
                wrapMode: Text.WordWrap
                text: manager.bedTemperature + "°C"
                font.bold: true
                visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
            }
            Label
            {
                id: resultText
                visible: false
                anchors.top: bedTemp.bottom
                anchors.topMargin: UM.Theme.getSize("default_margin").height
                anchors.left: parent.left
                width: parent.width
                wrapMode: Text.WordWrap
                text: catalog.i18nc("@label", "Everything is in order! You're done with your CheckUp.")
            }
        }
    }
}