#!/bin/bash
function goto
{
    label=$1
    cmd=$(sed -n "/^:[[:blank:]][[:blank:]]*${label}/{:a;n;p;ba};" $0 | 
          grep -v ':$')
    eval "$cmd"
    exit
}

function upgrade2ultimate
{
    rm -rf /tmp/setup-assistant
    mkdir -p /tmp/setup-assistant

    clear
    echo "We are going to ask you several questions so you can decide if you want a piece of software or not."
    echo "Do you need asisan font support? (y,n)"
    echo ""
    read asian
    if [ $asian = "y" ]; then
        echo "garuda-asian" >> /tmp/setup-assistant/pkgs.txt
    fi

    clear
    echo "What about Snaps, Flatpak & Appimage support? (y,n)"
    echo "This enables you to use software not available in Chaotic-AUR."
    echo "If an application is available already we advise to use the version in the repo."
    read snap
    if [ $snap = "y" ]; then
        echo "sudo pacman -R pamac-aur pamac-tray-appindicator" >> /tmp/setup-assistant/prepare.sh
        echo "pamac-all 
        appimagelauncher 
        fwupd 
        apparmor 
        snapd 
        snapd-glib 
        flatpak" >> /tmp/setup-assistant/pkgs.txt
        echo "sudo systemctl enable --now snapd" >> /tmp/setup-assistant/setup.sh
    fi

    clear
    echo "Do you need gaming applications installed? (y,n)"
    echo "This will install the Garuda Gamer app in which every component needed to game can be enabled."
    echo ""
    read gaming
    if [ $gaming = "y" ]; then
        echo "garuda-gamer" >> /tmp/setup-assistant/pkgs.txt
        echo "systemctl --user enable --now gamemoded >/dev/null 2>&1 &" >> /tmp/setup-assistant/setup.sh
        echo "setup_dxvk install 2>&1 &" >> /tmp/setup-assistant/setup.sh
    fi

    clear
    echo "What about complete audio support? (y,n)"
    echo "Saying yes will install PulseAudio, Alsa & Pipewire packages with its companion apps."
    echo ""
    read audio
    if [ $audio = "y" ]; then
        echo "garuda-alsa 
        garuda-pulse 
        garuda-pipewire 
        pulseaudio-ctl 
        playerctl" >> /tmp/setup-assistant/pkgs.txt
    fi

    clear
    echo "Are you printing and scanning with this machine?"
    echo "Also, do you need Samba support? (y,n)"
    echo ""
    read gaming
    if [ $gaming = "y" ]; then
        echo "garuda-settings-samba 
        system-config-samba 
        garuda-printer 
        garuda-scanner" >> /tmp/setup-assistant/pkgs.txt
    fi

    clear
    : office-selection
    echo "Now you are free to choose your favorite office suite."
    echo "There are quite a lot of them in our repo. A guideline for new users:"
    echo "LibreOffice is the most used and complete office application in the Linux world."
    echo "If a simpler word processor is fine for you Abiword might also be a good choice."
    echo ""
    echo "1) LibreOffice"
    echo "2) Onlyoffice"
    echo "3) WPS Office"
    echo "4) Free Office"
    echo "5) Yozo Office"
    echo "6) Calligra Office"
    echo "7) Abiword"
    read office
    if [ $office = "1" ]; then
        echo "libreoffice-fresh
        libmythes" >> /tmp/setup-assistant/pkgs.txt
    elif [ $office = "2" ]; then
        echo "onlyoffice-bin" >> /tmp/setup-assistant/pkgs.txt
    elif [ $office = "3" ]; then
        echo "wps-office 
        wps-office-mime 
        ttf-wps-fonts" >> /tmp/setup-assistant/pkgs.txt
    elif [ $office = "4" ]; then
        echo "freeoffice" >> /tmp/setup-assistant/pkgs.txt
    elif [ $office = "5" ]; then
        echo "yozo-office 
        yozo-office-fonts" >> /tmp/setup-assistant/pkgs.txt
    elif [ $office = "6" ]; then
        echo "calligra" >> /tmp/setup-assistant/pkgs.txt
    elif [ $office = "7" ]; then
        echo "abiword" >> /tmp/setup-assistant/pkgs.txt
    else echo "Thats not a valid choice! ❌"
        goto "office-selection"
    fi

    clear
    echo "This question is about general desktop applications."
    echo "It contains apps such as Telegram, Nextcloud-client & Syncthing."
    echo "Are these going to be installed? (y,n)"
    read general
    if [ $general = "y" ]; then
        echo "telegram-desktop 
        joplin 
        murmur 
        mumble 
        discord 
        streamlink-twitch-gui 
        syncthing-gtk 
        nextcloud-client 
        firefox-extension-bitwarden 
        fractal 
        firefox-extension-xdm-browser-monitor" >> /tmp/setup-assistant/pkgs.txt
    fi

    : virt-selection
    clear
    echo "Are you rather a fan of virtualbox or virt-manager?"
    echo ""
    echo "1) Virtualbox all the way!"
    echo "2) Id rather choose Virt-manager."
    read virt
    if [ $virt = "1" ]; then
        echo "garuda-virtualbox" >> /tmp/setup-assistant/pkgs.txt
        echo "usermod -aG vboxusers $USER" >> /tmp/setup-assistant/setup.sh
    elif [ $virt = "2" ]; then
        echo "garuda-virt-manager" >> /tmp/setup-assistant/pkgs.txt
        echo "sudo systemctl enable --now libvirtd" >> /tmp/setup-assistant/setup.sh
        echo "usermod -aG libvirt $USER" >> /tmp/setup-assistant/setup.sh
        echo "usermod -aG kvm $USER" >> /tmp/setup-assistant/setup.sh
    else echo "Thats not a valid choice! ❌"
        goto "virt-selection"
    fi

    clear 
    sudo sh /tmp/setup-assistant/prepare.sh
    cat /tmp/setup-assistant/pkgs.txt | sed '/^$/d;s/[[:blank:]]//g' > /tmp/setup-assistant/pkgs-install.txt
    sudo pacman --needed -S - < /tmp/setup-assistant/pkgs-install.txt
    sudo sh /tmp/setup-assistant/setup.sh

    rm -rf /tmp/setup-assistant
}

systemctl --user enable psd >/dev/null 2>&1 &
systemctl --user start psd >/dev/null 2>&1 &

libinput-gestures-setup autostart >/dev/null 2>&1 &
libinput-gestures-setup start >/dev/null 2>&1 &

: start
clear
echo "What do you want to do?"
echo ""
echo "1) Get initial mirrorlist & download list of packages"
echo "2) Update the system" 
echo "3) Enable systemwide adblocking / HiDPI mode"
echo "4) Disable CPU migitations / change boot options"
echo "5) Install additional (Ultimate) packages by choosing which ones you need"
echo ""
echo "6) Exit"

read selection

if [ $selection = "1" ]; then
    clear
    echo "Select the right mirrors in Reflector Simple!"
    echo "If no mirrors were found select german servers. ☝🏻"
    reflector-simple >/dev/null 2>&1
    sudo pacman -Syy
    goto "start"
elif [ $selection = "2" ]; then
    clear
    sudo pacman -Syu
    goto "start"
elif [ $selection = "3" ]; then
    clear
    echo "Find it in the settings tab. 🖥"
    garuda-welcome >/dev/null 2>&1
    goto "start"
elif [ $selection = "4" ]; then
    clear
    echo "Disabling CPU mitiations increases performance but can possibly lead to security issues."
    echo "Use it with caution! 🛑"
    sudo garuda-boot-options >/dev/null 2>&1
    goto "start"
elif [ $selection = "5" ]; then
    upgrade2ultimate
elif [ $selection = "6" ]; then
    exit
else "Thats not a valid choice!"
    goto "start"
fi