#!/bin/bash

# -------------------------------------------------
# System
# -------------------------------------------------

OS=$(grep PRETTY_NAME /etc/os-release | cut -d '"' -f2)

HOST_MODEL=$(cat /sys/class/dmi/id/product_name 2>/dev/null)

KERNEL=$(uname -r)

UPTIME=$(awk '{
    printf "%d dagar, %d timar, %d minutt",
        int($1/86400),
        int(($1%86400)/3600),
        int(($1%3600)/60)
}' /proc/uptime)

if command -v rpm &>/dev/null; then
    PKGS=$(rpm -qa | wc -l)
elif command -v dpkg &>/dev/null; then
    PKGS=$(dpkg -l | wc -l)
else
    PKGS="N/A"
fi


# -------------------------------------------------
# Skjerm og skrivebord
# -------------------------------------------------
if command -v kscreen-doctor &>/dev/null; then
    RES=$(
        kscreen-doctor -o 2>/dev/null |
        awk '/Geometry:/ {
            if (match($0, /[0-9]+x[0-9]+/)) {
                print substr($0, RSTART, RLENGTH)
                exit
            }
        }'
    )
elif command -v xrandr &>/dev/null; then
    RES=$(xrandr 2>/dev/null | awk '/\*/ {print $1; exit}')
else
    RES="N/A"
fi

RES="${RES:-N/A}"

if [[ "$XDG_CURRENT_DESKTOP" == *KDE* ]]; then
    PLASMA_VERSION=$(plasmashell --version 2>/dev/null | awk '{print $2}')
    DESKTOP="KDE Plasma ${PLASMA_VERSION:-Unknown}"
else
    DESKTOP="${XDG_CURRENT_DESKTOP:-N/A}"
fi

if [ -n "$WAYLAND_DISPLAY" ]; then
    DS="Wayland"
elif [ -n "$DISPLAY" ]; then
    DS="X11"
else
    DS="N/A"
fi


# -------------------------------------------------
# CPU
# -------------------------------------------------

CPU=$(grep "model name" /proc/cpuinfo |
    head -1 |
    cut -d: -f2 |
    xargs)

if command -v sensors &>/dev/null; then
    CPU_TEMP=$(
        sensors 2>/dev/null |
        awk '
            /Package id 0:/ || /Tctl:/ {
                for (i = 1; i <= NF; i++) {
                    if ($i ~ /^[+-][0-9.]+°C$/) {
                        print $i
                        exit
                    }
                }
            }
        '
    )
else
    CPU_TEMP="sensors is not installed"
fi


# -------------------------------------------------
# GPU
# -------------------------------------------------

# -------------------------------------------------
# GPU
# -------------------------------------------------

# Hent GPU-namn
mapfile -t GPUS < <(
    lspci |
    awk '/VGA compatible controller|3D controller|Display controller/ {
        sub(/^[^ ]+ /, "")
        sub(/^[^:]+: /, "")
        print
    }'
)

GPU1="${GPUS[0]:-N/A}"
GPU2="${GPUS[1]:-N/A}"


# Hent drivar for kvar GPU
mapfile -t GPU_DRIVERS < <(
    lspci -k |
    awk '
        /VGA compatible controller|3D controller|Display controller/ {
            gpu=1
            next
        }

        /^[^[:space:]]/ {
            gpu=0
        }

        gpu && /Kernel driver in use:/ {
            sub(/^[[:space:]]*Kernel driver in use:[[:space:]]*/, "")
            print
            gpu=0
        }
    '
)

GPU1_DRIVER="${GPU_DRIVERS[0]:-N/A}"
GPU2_DRIVER="${GPU_DRIVERS[1]:-N/A}"

# -------------------------------------------------
# OpenGL
# -------------------------------------------------

if command -v glxinfo &>/dev/null; then

    OPENGL_RENDERER=$(
        glxinfo 2>/dev/null |
        grep "OpenGL renderer string" |
        cut -d: -f2- |
        xargs
    )

    OPENGL_VERSION=$(
        glxinfo 2>/dev/null |
        grep "OpenGL version string" |
        cut -d: -f2- |
        xargs
    )

    OPENGL_CORE=$(
        glxinfo 2>/dev/null |
        grep "OpenGL core profile version string" |
        cut -d: -f2- |
        xargs
    )

    OPENGL_ES=$(
        glxinfo 2>/dev/null |
        grep "OpenGL ES profile version string" |
        cut -d: -f2- |
        xargs
    )

else

    OPENGL_RENDERER="glxinfo is not installed"
    OPENGL_VERSION="N/A"
    OPENGL_CORE="N/A"
    OPENGL_ES="N/A"

fi


# -------------------------------------------------
# Vulkan
# -------------------------------------------------

if command -v vulkaninfo &>/dev/null; then

    VK=$(
        vulkaninfo --summary 2>/dev/null |
        grep "Vulkan Instance Version" |
        awk '{print $4}'
    )

else
    VK="N/A"
fi


# -------------------------------------------------
# Minne
# -------------------------------------------------

MEM_TOTAL=$(free | awk '/Mem:/ {print $2}')
MEM_USED=$(free | awk '/Mem:/ {print $3}')

MEM_PERCENT=$((MEM_USED * 100 / MEM_TOTAL))

MEM_H=$(free -h |
    awk '/Mem:/ {print $3 " / " $2}')

SWAP=$(free -h |
    awk '/Swap:/ {print $3 " / " $2}')


# -------------------------------------------------
# Disk
# -------------------------------------------------

DISK_PERCENT=$(
    df / |
    awk 'NR==2 {
        gsub("%","")
        print $5
    }'
)

DISK_H=$(
    df -h / |
    awk 'NR==2 {
        print $3 " / " $2
    }'
)


# -------------------------------------------------
# Nettverk
# -------------------------------------------------

IP=$(hostname -I | awk '{print $1}')


# -------------------------------------------------
# Batteri
# -------------------------------------------------

BAT="N/A"

if command -v upower &>/dev/null; then

    BAT_DEVICE=$(
        upower -e |
        grep BAT |
        head -1
    )

    if [ -n "$BAT_DEVICE" ]; then

        BAT=$(
            upower -i "$BAT_DEVICE" 2>/dev/null |
            awk '/percentage/ {
                print $2
            }'
        )

    fi
fi


# -------------------------------------------------
# Bygg systeminformasjon
# -------------------------------------------------

INFO=$(cat <<EOF
SYSTEM
────────────────────────────────────────────────────────────
User                 $(whoami)@$(hostname)
Operating system     $OS
Machine              ${HOST_MODEL:-N/A}
Kernel               $KERNEL
Up time              $UPTIME
Installed packages   $PKGS
Shell                $SHELL


DESKTOP
────────────────────────────────────────────────────────────
Resolution           $RES
Desktop environment  $DESKTOP
Display server       $DS


PROCESSOR
────────────────────────────────────────────────────────────
CPU                  $CPU
CPU temperature      ${CPU_TEMP:-N/A}


GRAPHICS
────────────────────────────────────────────────────────────
GPU 1                $GPU1
GPU 1 driver         $GPU1_DRIVER
GPU 2                $GPU2
GPU 2 driver         $GPU2_DRIVER

OpenGL renderer      $OPENGL_RENDERER
OpenGL version       $OPENGL_VERSION
OpenGL Core          $OPENGL_CORE
OpenGL ES            $OPENGL_ES
Vulkan               ${VK:-N/A}


RESOURCES
────────────────────────────────────────────────────────────
Memory               $MEM_H ($MEM_PERCENT%)
Swap                 $SWAP
Disk /               $DISK_H ($DISK_PERCENT%)


NETWORK / POWER
────────────────────────────────────────────────────────────
Local IP             ${IP:-N/A}
Battery              ${BAT:-N/A}
EOF
)


# -------------------------------------------------
# Vis informasjon
# -------------------------------------------------

printf '%s\n' "$INFO" |
qarma --text-info \
    --title="System information" \
    --window-icon="/usr/share/icons/hicolor/scalable/apps/openSUSE-distributor-logo.svg" \
    --width=1000 \
    --height=750 \
    --font="Monospace 11" \
    --cancel-label="close"
