pragma Singleton

pragma ComponentBehavior: Bound

import QtQuick
import Quickshell
import Quickshell.Io

Singleton {
    id: root

    property string username: ""
    property string fullName: ""
    property string profilePicture: ""
    property string uptime: ""
    property string shortUptime: ""
    property string hostname: ""
    property bool profileAvailable: false

    function getUserInfo() {
        userInfoProcess.running = true
    }

    function getUptime() {
        uptimeProcess.running = true
    }

    function refreshUserInfo() {
        getUserInfo()
        getUptime()
    }

    Component.onCompleted: {
        getUserInfo()
        getUptime()
    }

    Process {
        id: userInfoProcess

        command: ["bash", "-c", "echo \"$USER|$(getent passwd $USER | cut -d: -f5 | cut -d, -f1)|$(hostname)\""]
        running: false
        onExited: exitCode => {
            if (exitCode !== 0) {

                root.username = "User"
                root.fullName = "User"
                root.hostname = "System"
            }
        }

        stdout: StdioCollector {
            onStreamFinished: {
                const parts = text.trim().split("|")
                if (parts.length >= 3) {
                    root.username = parts[0] || ""
                    root.fullName = parts[1] || parts[0] || ""
                    root.hostname = parts[2] || ""
                }
            }
        }
    }

    Process {
        id: uptimeProcess

        command: ["cat", "/proc/uptime"]
        running: false

        onExited: exitCode => {
            if (exitCode !== 0) {
                root.uptime = "Unknown"
            }
        }

        stdout: StdioCollector {
            onStreamFinished: {
                const seconds = parseInt(text.split(" ")[0])
                const days = Math.floor(seconds / 86400)
                const hours = Math.floor((seconds % 86400) / 3600)
                const minutes = Math.floor((seconds % 3600) / 60)

                const parts = []
                if (days > 0) {
                    parts.push(`${days} day${days === 1 ? "" : "s"}`)
                }
                if (hours > 0) {
                    parts.push(`${hours} hour${hours === 1 ? "" : "s"}`)
                }
                if (minutes > 0) {
                    parts.push(`${minutes} minute${minutes === 1 ? "" : "s"}`)
                }

                if (parts.length > 0) {
                    root.uptime = `up ${parts.join(", ")}`
                } else {
                    root.uptime = `up ${seconds} seconds`
                }

                // Create short uptime format
                let shortUptime = "up"
                if (days > 0) {
                    shortUptime += ` ${days}d`
                }
                if (hours > 0) {
                    shortUptime += ` ${hours}h`
                }
                if (minutes > 0) {
                    shortUptime += ` ${minutes}m`
                }
                root.shortUptime = shortUptime
            }
        }
    }
}
