#!/bin/bash

uname=$(whoami)
admintoken=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c8)
architecture=$(arch)
bpwd=$(pwd)

# Betriebssystem erkennen
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
    UPSTREAM_ID=${ID_LIKE,,}
    if [ "${UPSTREAM_ID}" != "debian" ] && [ "${UPSTREAM_ID}" != "ubuntu" ]; then
        UPSTREAM_ID="$(echo ${ID_LIKE,,} | sed s/\"//g | cut -d' ' -f1)"
    fi
elif type lsb_release >/dev/null 2>&1; then
    OS=$(lsb_release -si)
    VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/redhat-release ]; then
    OS=RedHat
    VER=$(cat /etc/redhat-release)
else
    OS=$(uname -s)
    VER=$(uname -r)
fi

# Aktuelle Version von GitHub API holen
if command -v curl > /dev/null; then
    lversion=$(curl -s https://api.github.com/repos/rustdesk/rustdesk/releases/latest | grep '"tag_name"' | awk '{print substr($2, 2, length($2)-3)}')
fi
echo "Installiere RustDesk $lversion ..."

# RustDesk installieren
if [ "$OS" = "Ubuntu" ] || [ "${UPSTREAM_ID}" = "ubuntu" ]; then
    if [[ "$architecture" != @("x86_64"|"aarch64") ]]; then
        echo "Nicht unterstützte Architektur: $architecture"
        exit 1
    fi
    if [ "$architecture" = "aarch64" ]; then
        sudo add-apt-repository -y universe
        sudo apt install -y libxdo3 curl libva-drm2 libva-x11-2
    fi
    wget https://github.com/rustdesk/rustdesk/releases/download/$lversion/rustdesk-$lversion-$architecture.deb -O "$bpwd/rustdesk-$lversion-$architecture.deb"
    sudo apt install -fy "$bpwd/rustdesk-$lversion-$architecture.deb"
elif [ "${ID}" = "debian" ] || [ "$OS" = "Debian" ] || [ "${UPSTREAM_ID}" = "debian" ]; then
    wget https://github.com/rustdesk/rustdesk/releases/download/$lversion/rustdesk-$lversion-x86_64.deb -O "$bpwd/rustdesk-$lversion-x86_64.deb"
    sudo apt install -fy "$bpwd/rustdesk-$lversion-x86_64.deb"
elif [ "$OS" = "CentOS" ] || [ "$OS" = "RedHat" ] || [ "$OS" = "Fedora Linux" ] || [ "${UPSTREAM_ID}" = "rhel" ]; then
    wget https://github.com/rustdesk/rustdesk/releases/download/$lversion/rustdesk-$lversion-0.x86_64.rpm -O "$bpwd/rustdesk-$lversion-0.x86_64.rpm"
    sudo yum localinstall "$bpwd/rustdesk-$lversion-0.x86_64.rpm"
else
    echo "Nicht unterstütztes Betriebssystem: $OS"
    exit 1
fi

sleep 5
rustdesk --password "${admintoken}"
sudo pkill -f 'rustdesk'

# Konfiguration für den eingeloggten Benutzer
sudo tee /home/${uname}/.config/rustdesk/RustDesk2.toml > /dev/null << EOF
rendezvous_server = 'rustdesk.wiesnerd.at'
nat_type = 1
serial = 3

[options]
key = 'c/35X3R2Lox71R7IZt8R1u1rL0qeyIjzzzFasxEQ1hhFs='
custom-rendezvous-server = 'rustdesk.wiesnerd.at'
relay-server = 'rustdesk.wiesnerd.at'
EOF

# Konfiguration für root (Systemdienst)
sudo tee /root/.config/rustdesk/RustDesk2.toml > /dev/null << EOF
rendezvous_server = 'rustdesk.wiesnerd.at'
nat_type = 1
serial = 3

[options]
key = 'c/35X3R2Lox71R7IZt8R1u1rL0qeyIjzzzFasxEQ1hhFs='
custom-rendezvous-server = 'rustdesk.wiesnerd.at'
relay-server = 'rustdesk.wiesnerd.at'
EOF

sudo chown ${uname}:${uname} /home/${uname}/.config/rustdesk/RustDesk2.toml
sudo systemctl restart rustdesk

echo ''
echo 'RustDesk erfolgreich installiert und konfiguriert.'
echo 'Server: rustdesk.wiesnerd.at'
echo ''
echo "ID und Passwort fuer Benutzer ${uname}:"
grep -w id /home/${uname}/.config/rustdesk/RustDesk.toml 2>/dev/null || echo '(ID wird nach erstem Start vergeben)'
grep -w password /home/${uname}/.config/rustdesk/RustDesk.toml 2>/dev/null

echo ''
echo 'ID und Passwort fuer root (Systemdienst):'
sudo grep -w id /root/.config/rustdesk/RustDesk.toml 2>/dev/null || echo '(ID wird nach erstem Start vergeben)'
sudo grep -w password /root/.config/rustdesk/RustDesk.toml 2>/dev/null
