#!/usr/bin/bash

# Variable
RED=$'\033[0;31m'
GREEN=$'\033[0;32m'
YELLOW=$'\033[0;33m'
BLUE=$'\033[0;34m'
ENDCOLOR="\e[0m"

USER_NAME="hostpoint"
USER_HOME="/home/$USER_NAME"
UID_NUM="$(id -u "$USER_NAME")"
ICON_URL="https://moodle.hostpoint.education/pluginfile.php/1/core_admin/logocompact/300x300/1786341437/0x0.png"
ICON_DIR="$USER_HOME/.local/share/icons/hicolor/256x256/apps"

URL="https://moodle.hostpoint.education"
TITLE="Moodle"

# Function

add_privilege() {
    if ! grep -qxF "%wheel ALL=(ALL:ALL) ALL" /etc/sudoers.d/10-wheel 2>/dev/null; then
        echo "%wheel ALL=(ALL:ALL) ALL" >> /etc/sudoers.d/10-wheel || {
            echo -e "${RED}\nFehler: Admin-Gruppe konnte nicht erstellt werden!${ENDCOLOR}"
            return 1
        }

        chmod 440 /etc/sudoers.d/10-wheel || {
            echo -e "${RED}\nFehler: Berechtigungen konnten nicht gesetzt werden!${ENDCOLOR}"
            return 1
        }

        echo -e "${GREEN}\nAdmin-Gruppe erstellt!${ENDCOLOR}"
    else
        echo -e "${GREEN}\nAdmin-Gruppe existiert bereits!${ENDCOLOR}"
    fi


echo

# Prüfen ob Nutzer bereits Teil der "wheel" Gruppe ist um Mehrfachausführbarkeit zu gewährleisten
	echo -e "Prüfe ob Nutzer bereits Teil der Admin-Gruppe ist..."
	if ! id -nG "$USER_NAME" | grep -qw "wheel"; then
		echo -e "Füge Nutzer der Administratoren Gruppe hinzu..."
		usermod -aG wheel $USER_NAME 2>/dev/null || {
			echo -e "${RED}Fehler: Nutzer konnte nicht der Administratoren Gruppe hinzugefügt werden!${ENDCOLOR}"
			return 1
		}
		echo -e "${GREEN}Nutzer wurde der Administratoren Gruppe hinzugefügt!${ENDCOLOR}"
	else
		echo -e "${GREEN}Nutzer ist bereits Teil der Admin-Gruppe!${ENDCOLOR}"
	fi
	echo
}

# Moodle als Verknüpfung in die Hotbar einfügen
hotbar(){

mkdir -p "$USER_HOME/.local/share/applications" "$ICON_DIR" || {
    echo -e "${RED}Fehler: Ordner für die Hotbar konnten nicht erstellt werden!${ENDCOLOR}"
    return 1
}

curl -sL "$ICON_URL" -o "$ICON_DIR/hp-moodle.png" || {
    echo -e "${RED}Fehler: Moodle-Icon konnte nicht heruntergeladen werden!${ENDCOLOR}"
    return 1
}

cat > "$USER_HOME/.local/share/applications/hp-moodle.desktop" <<'EOF'
[Desktop Entry]
Type=Application
Name=hp-moodle.ch
Exec=xdg-open https://moodle.hostpoint.education
Icon=hp-moodle
Terminal=false
EOF

if [[ $? -ne 0 ]]; then
    echo -e "${RED}Fehler: Desktop-Verknüpfung konnte nicht erstellt werden!${ENDCOLOR}"
    return 1
fi

chown "$USER_NAME:$USER_NAME" "$USER_HOME/.local/share/applications/hp-moodle.desktop" "$ICON_DIR/hp-moodle.png" || {
        echo -e "${RED}Fehler: Besitzer der Verknüpfung konnte nicht gesetzt werden!${ENDCOLOR}"
        return 1
    }

export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID_NUM/bus"  

fav="$(runuser -u "$USER_NAME" -- gsettings get org.gnome.shell favorite-apps)" || {
    echo -e "${RED}Fehler: Hotbar konnte nicht ausgelesen werden!${ENDCOLOR}"
    return 1
}

runuser -u "$USER_NAME" -- gsettings set org.gnome.shell favorite-apps \
    "${fav%]}, 'Moodle']" || {
        echo -e "${RED}Fehler: Moodle konnte nicht in die Hotbar eingefügt werden!${ENDCOLOR}"
        return 1
    }
}

# Ausgabe von Begrüssung für den Nutzer, um das Script anschaulicher gestalten zu können
echo -e "\n${BLUE}---------------------------------------------------------------------"
echo -e "| Willkommen beim Schnupper- und Selektionstag Konfiguration Script |"
echo -e "---------------------------------------------------------------------${ENDCOLOR}\n"

# Prüfe ob Nutzer Root ist, um die Abfrage von Passwörtern während des Scripts zu umgehen
echo -e "Prüfe ob Nutzer Root ist..."
# Gebe Nutzer Fehler 126 aus: Verfügt über keine Root-Rechte um der Anforderung von sinnvollen Exit-Codes gerecht zu werden
if [ "$EUID" -ne 0 ]; then
	echo -e "${RED}Fehler: Du verfügst über keine Root-Rechte. Bitte führe diese Datei mittels sudo aus oder wechsle auf den Root-User!"${ENDCOLOR}
	exit 126
fi
echo -e "${GREEN}Nutzer hat Root-Rechte!\n${ENDCOLOR}"

# Prüfe ob --help als Parameter mitgegeben wurde, um eine Hilfestellung bieten zu können
if [ "$1" == "--help" ]; then
	echo "Globale Optionen:"
	echo -e "\n--admin			um den Nutzer der Administratoren Gruppe hinzuzufügen\n"
	exit 0
fi

# Prüfen ob --admin Parameter mitgegeben wurde, um den Nutzer "hostpoint" der "wheel" Gruppe hinzuzufügen können
if [ "$1" == "--admin" ]; then
	add_privilege
fi

# Prüfe ob Salt installiert ist, um Löschung eines nicht existierenden Pakets zu verhinden
echo -e "Prüfe ob Salt installiert ist..."
if pacman -Q salt-onedir &>/dev/null; then
	echo -e "${RED}Salt gefunden!\n"
	echo -e "Initialisiere Löschung...\n${ENDCOLOR}"

	pacman -Runs --noconfirm salt-onedir &>/dev/null || {
		echo -e "${RED}Fehler: Salt konnte nicht gelöscht werden!${ENDCOLOR}"
		exit 1
	}

	echo -e "${GREEN}Salt erfolgreich gelöscht!\n${ENDCOLOR}"
else
	echo -e "${GREEN}Salt nicht gefunden!\n${ENDCOLOR}"
fi

# Raspberry Pi Installation
if pacman -Qq rpi-imager &>/dev/null; then
	echo -e "${GREEN}Raspberry Pi Imager ist bereits installiert!\n${ENDCOLOR}"
else
    	read -rep "${YELLOW}Raspberry Pi Imager installieren? [j/N] " answer
	if [[ "$answer" =~ ^([jJ]|[yY])$ ]]; then
		if [ "$1" == "--admin" ]; then
			echo -e "${ENDCOLOR}Raspberry Pi Imager wird installiert..."
		else
			add_privilege || exit 1
        	echo -e "${ENDCOLOR}Raspberry Pi Imager wird installiert..."
		fi

		pacman -S rpi-imager --noconfirm &>/dev/null || {
			echo -e "${RED}Fehler: Raspberry Pi Imager konnte nicht installiert werden!${ENDCOLOR}"
			exit 1
		}

		echo -e "${GREEN}Raspberry Pi Imager wurde installiert!\n${ENDCOLOR}"
	else
        	echo -e "\n${ENDCOLOR}Übersprungen...\n"
   fi
fi

# Erstellung von Bookmarks für Chromium und Firefox

FIREFOX_POLICY="/etc/firefox/policies/policies.json"
echo -e "Firefox Bookmark wird hinzugefügt...\n"
if grep -Fq 'https://moodle.hostpoint.education' "$FIREFOX_POLICY"; then
    echo -e "${YELLOW}Firefox: Moodle Bookmark existiert bereits.${ENDCOLOR}"
else
    if sed -i '/"policies"[[:space:]]*:[[:space:]]*{/a\
    "ManagedBookmarks": [\
      {\
        "toplevel_name": "Hostpoint"\
      },\
      {\
        "name": "Moodle",\
        "url": "https://moodle.hostpoint.education"\
      }\
    ],' "$FIREFOX_POLICY"; then
        echo -e "${GREEN}Firefox: Moodle Bookmark wurde erfolgreich hinzugefügt.${ENDCOLOR}"
    else
        echo -e "${RED}Firefox: Fehler beim Hinzufügen des Moodle Bookmarks.${ENDCOLOR}"
    fi
fi

CHROMIUM_POLICY="/etc/chromium/policies/managed/hostpoint_policies.json"
echo -e "Chromium Bookmark wird hinzugefügt...\n"
if grep -Fq 'https://moodle.hostpoint.education' "$CHROMIUM_POLICY"; then
    echo -e "${YELLOW}Chromium: Moodle Bookmark existiert bereits.${ENDCOLOR}"
else
    if sed -i '1a\
  "ManagedBookmarks": [\
    {\
      "toplevel_name": "Hostpoint"\
    },\
    {\
      "name": "Moodle",\
      "url": "https://moodle.hostpoint.education"\
    }\
  ],' "$CHROMIUM_POLICY"; then
        echo -e "${GREEN}Chromium: Moodle Bookmark wurde erfolgreich hinzugefügt.${ENDCOLOR}"
    else
        echo -e "${RED}Chromium: Fehler beim Hinzufügen des Moodle Bookmarks.${ENDCOLOR}"
    fi
fi

echo "\nHotbar-Verknüpfung wird eingefügt..."
if hotbar; then
    echo -e "${GREEN}Die Hotbar wurde erfolgreich eingefügt!${ENDCOLOR}\n"
else
    echo -e "${RED}Fehler beim Einfügen in die Hotbar!${ENDCOLOR}"
    exit 1
fi

# Ausgabe von Verabschiedung für den Nutzer, damit man weiss wann das Script zuende ist
echo -e "${GREEN}Das Script wurde erfolgreich abgeschlossen!${ENDCOLOR}"