import QtQuick
import QtQuick.Effects
import qs.Common
import qs.Services
import qs.Widgets

Card {
    id: root

    Component.onCompleted: {
        DgopService.addRef(["cpu", "memory", "system"])
    }
    Component.onDestruction: {
        DgopService.removeRef(["cpu", "memory", "system"])
    }

    Row {
        anchors.fill: parent
        anchors.margins: Theme.spacingS
        spacing: Theme.spacingM

        // CPU Bar
        Column {
            width: (parent.width - 2 * Theme.spacingM) / 3
            height: parent.height
            spacing: Theme.spacingS

            Rectangle {
                width: 8
                height: parent.height - Theme.iconSizeSmall - Theme.spacingS
                radius: 4
                anchors.horizontalCenter: parent.horizontalCenter
                color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)

                Rectangle {
                    width: parent.width
                    height: parent.height * Math.min((DgopService.cpuUsage || 6) / 100, 1)
                    radius: parent.radius
                    anchors.bottom: parent.bottom
                    anchors.horizontalCenter: parent.horizontalCenter
                    color: {
                        if (DgopService.cpuUsage > 80) return Theme.error
                        if (DgopService.cpuUsage > 60) return Theme.warning
                        return Theme.primary
                    }

                    Behavior on height {
                        NumberAnimation {
                            duration: Theme.shortDuration
                            easing.type: Theme.standardEasing
                        }
                    }
                }
            }

            Item {
                width: parent.width
                height: Theme.iconSizeSmall

                DankIcon {
                    name: "memory"
                    size: Theme.iconSizeSmall
                    anchors.horizontalCenter: parent.horizontalCenter
                    anchors.bottom: parent.bottom
                    color: {
                        if (DgopService.cpuUsage > 80) return Theme.error
                        if (DgopService.cpuUsage > 60) return Theme.warning
                        return Theme.primary
                    }
                }
            }
        }

        // Temperature Bar
        Column {
            width: (parent.width - 2 * Theme.spacingM) / 3
            height: parent.height
            spacing: Theme.spacingS

            Rectangle {
                width: 8
                height: parent.height - Theme.iconSizeSmall - Theme.spacingS
                radius: 4
                anchors.horizontalCenter: parent.horizontalCenter
                color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)

                Rectangle {
                    width: parent.width
                    height: parent.height * Math.min(Math.max((DgopService.cpuTemperature || 40) / 100, 0), 1)
                    radius: parent.radius
                    anchors.bottom: parent.bottom
                    anchors.horizontalCenter: parent.horizontalCenter
                    color: {
                        if (DgopService.cpuTemperature > 85) return Theme.error
                        if (DgopService.cpuTemperature > 69) return Theme.warning
                        return Theme.primary
                    }

                    Behavior on height {
                        NumberAnimation {
                            duration: Theme.shortDuration
                            easing.type: Theme.standardEasing
                        }
                    }
                }
            }

            Item {
                width: parent.width
                height: Theme.iconSizeSmall

                DankIcon {
                    name: "device_thermostat"
                    size: Theme.iconSizeSmall
                    anchors.horizontalCenter: parent.horizontalCenter
                    anchors.bottom: parent.bottom
                    color: {
                        if (DgopService.cpuTemperature > 85) return Theme.error
                        if (DgopService.cpuTemperature > 69) return Theme.warning
                        return Theme.primary
                    }
                }
            }
        }

        // RAM Bar
        Column {
            width: (parent.width - 2 * Theme.spacingM) / 3
            height: parent.height
            spacing: Theme.spacingS

            Rectangle {
                width: 8
                height: parent.height - Theme.iconSizeSmall - Theme.spacingS
                radius: 4
                anchors.horizontalCenter: parent.horizontalCenter
                color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2)

                Rectangle {
                    width: parent.width
                    height: parent.height * Math.min((DgopService.memoryUsage || 42) / 100, 1)
                    radius: parent.radius
                    anchors.bottom: parent.bottom
                    anchors.horizontalCenter: parent.horizontalCenter
                    color: {
                        if (DgopService.memoryUsage > 90) return Theme.error
                        if (DgopService.memoryUsage > 75) return Theme.warning
                        return Theme.primary
                    }

                    Behavior on height {
                        NumberAnimation {
                            duration: Theme.shortDuration
                            easing.type: Theme.standardEasing
                        }
                    }
                }
            }

            Item {
                width: parent.width
                height: Theme.iconSizeSmall

                DankIcon {
                    name: "developer_board"
                    size: Theme.iconSizeSmall
                    anchors.horizontalCenter: parent.horizontalCenter
                    anchors.bottom: parent.bottom
                    color: {
                        if (DgopService.memoryUsage > 90) return Theme.error
                        if (DgopService.memoryUsage > 75) return Theme.warning
                        return Theme.primary
                    }
                }
            }
        }
    }
}