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

import QtQuick 2.10
import QtQuick.Controls 2.3

import UM 1.5 as UM
import Cura 1.0 as Cura

Loader {
    id: loader
    width: parent.width
    sourceComponent: {
        switch (model.componentType) {
            case "HIDE_BUTTON":
                hideButtonComponent
                break;
            case "SHOW_BUTTON":
                showButtonComponent
                break;
            case "MACHINE":
                machineListButtonComponent
                break;
            default:
        }
    }
    property var onClicked

    Component
    {
        id: hideButtonComponent
        Cura.TertiaryButton
        {
            text: catalog.i18nc("@label", "Hide all connected printers")
            height: UM.Theme.getSize("large_button").height
            onClicked: if (loader.onClicked) loader.onClicked()
            iconSource: UM.Theme.getIcon("ChevronSingleUp")
            width: parent.width
        }
    }

    Component
    {
        id: showButtonComponent
        Cura.TertiaryButton
        {
            text: catalog.i18nc("@label", "Show all connected printers")
            height: UM.Theme.getSize("large_button").height
            onClicked: if (loader.onClicked) loader.onClicked()
            iconSource: UM.Theme.getIcon("ChevronSingleDown")
            width: parent.width
        }
    }

    Component
    {
        id: machineListButtonComponent

        Button
        {
            id: machineListButton

            onClicked: if (loader.onClicked) loader.onClicked()

            width: parent.width
            height: UM.Theme.getSize("large_button").height
            leftPadding: UM.Theme.getSize("default_margin").width
            rightPadding: UM.Theme.getSize("default_margin").width
            checkable: true
            hoverEnabled: true

            contentItem: Item
            {
                width: machineListButton.width - machineListButton.leftPadding - machineListButton.rightPadding
                height: UM.Theme.getSize("action_button").height

                UM.ColorImage
                {
                    id: printerIcon
                    height: UM.Theme.getSize("medium_button").height
                    width: UM.Theme.getSize("medium_button").width
                    color: UM.Theme.getColor("machine_selector_printer_icon")
                    visible: model.isAbstractMachine || !model.isOnline
                    source: model.isAbstractMachine ? UM.Theme.getIcon("PrinterTriple", "medium") : UM.Theme.getIcon("Printer", "medium")

                    anchors
                    {
                        left: parent.left
                        verticalCenter: parent.verticalCenter
                    }
                }

                UM.Label
                {
                    id: buttonText
                    anchors
                    {
                        left: printerIcon.right
                        right: printerCount.left
                        verticalCenter: parent.verticalCenter
                        leftMargin: UM.Theme.getSize("default_margin").width
                    }
                    text: model.name ? model.name : ""
                    font: model.isAbstractMachine ? UM.Theme.getFont("medium_bold") : UM.Theme.getFont("medium")
                    visible: text != ""
                    elide: Text.ElideRight
                }

                Rectangle
                {
                    id: printerCount
                    color: UM.Theme.getColor("background_2")
                    radius: height
                    width: height
                    anchors
                    {
                        right: parent.right
                        top: buttonText.top
                        bottom: buttonText.bottom
                    }
                    visible: model.isAbstractMachine ? model.isAbstractMachine : false

                    UM.Label
                    {
                        text: model.machineCount ? model.machineCount : ""
                        anchors.centerIn: parent
                        font: UM.Theme.getFont("default_bold")
                    }
                }
            }

            background: Rectangle
            {
                id: backgroundRect
                color: machineListButton.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent"
            }
        }
    }
}