// Copyright (c) 2020 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.

import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.3

import UM 1.2 as UM
import Cura 1.0 as Cura


// This element hold all the elements needed for the user to trigger the slicing process, and later
// to get information about the printing times, material consumption and the output process (such as
// saving to a file, printing over network, ...
Item
{
    id: base
    width: actionPanelWidget.width + additionalComponents.width
    height: childrenRect.height
    visible: CuraApplication.platformActivity

    property bool hasPreviewButton: true

    Rectangle
    {
        id: actionPanelWidget

        width: UM.Theme.getSize("action_panel_widget").width
        height: childrenRect.height + 2 * UM.Theme.getSize("thick_margin").height
        anchors.right: parent.right
        color: UM.Theme.getColor("main_background")
        border.width: UM.Theme.getSize("default_lining").width
        border.color: UM.Theme.getColor("lining")
        radius: UM.Theme.getSize("default_radius").width
        z: 10

        property bool outputAvailable: UM.Backend.state == UM.Backend.Done || UM.Backend.state == UM.Backend.Disabled

        Loader
        {
            id: loader
            anchors
            {
                top: parent.top
                topMargin: UM.Theme.getSize("thick_margin").height
                left: parent.left
                leftMargin: UM.Theme.getSize("thick_margin").width
                right: parent.right
                rightMargin: UM.Theme.getSize("thick_margin").width
            }
            sourceComponent: actionPanelWidget.outputAvailable ? outputProcessWidget : sliceProcessWidget
            onLoaded:
            {
                if(actionPanelWidget.outputAvailable)
                {
                    loader.item.hasPreviewButton = base.hasPreviewButton;
                }
            }
        }

        Component
        {
            id: sliceProcessWidget
            SliceProcessWidget { }
        }

        Component
        {
            id: outputProcessWidget
            OutputProcessWidget { }
        }
    }

    Item
    {
        id: additionalComponents
        width: childrenRect.width
        anchors.right: actionPanelWidget.left
        anchors.rightMargin: UM.Theme.getSize("default_margin").width
        anchors.bottom: actionPanelWidget.bottom
        anchors.bottomMargin: UM.Theme.getSize("thick_margin").height * 2
        visible: actionPanelWidget.visible
        Row
        {
            id: additionalComponentsRow
            anchors.verticalCenter: parent.verticalCenter
            spacing: UM.Theme.getSize("default_margin").width
        }
    }

    Component.onCompleted: base.addAdditionalComponents()

    Connections
    {
        target: CuraApplication
        function onAdditionalComponentsChanged(areaId) { base.addAdditionalComponents() }
    }

    function addAdditionalComponents()
    {
        for (var component in CuraApplication.additionalComponents["saveButton"])
        {
            CuraApplication.additionalComponents["saveButton"][component].parent = additionalComponentsRow
        }
    }
}