#!/bin/bash

version="0.1.1"
reldate="2026/08/02"

if (( EUID != 0 )); then
    echo "nanolx-orbit must be run as root"
    exit 1
fi

pkg_base="/var/cache/nanolx"
mkdir -p "${pkg_base}"

# version management in /usr/share for more flexibility
if [ -f nanolx-orbit.conf ]; then
    source nanolx-orbit.conf
else
    source /usr/share/nanolx/nanolx-orbit.conf
fi

curl_opts="-L --progress-bar -C -"

download_package () {
    url="${1}"
    pkg="${2}"
    sha="${3}"
    out="${pkg_base}/${4}"

    if [ -f "${out}" ]; then
        echo -e "\nPackage ${pkg} (${out##*/}) already downloaded, verifying"
        if ! echo "${sha}" "${out}" | sha256sum -c &>/dev/null; then
            echo "SHA256 checksum for ${out} is wrong"
            rm "${out}"
            noinst=true
        else
            echo "SHA256 checksum for ${out} is correct"
        fi
    else
        echo -e "\nDownloading ${pkg}: (${out})"
        curl ${curl_opts} -o "${out}" "${url}"
        if ! echo "${sha}" "${out}" | sha256sum -c &>/dev/null; then
            echo "SHA256 checksum for ${out} is wrong"
            rm "${out}"
            noinst=true
        else
            echo "SHA256 checksum for ${out} is correct"
        fi
    fi

}

install_package () {
    pkg="${pkg_base}/${1}"

    if [[ "${mode}" = "in" ]]; then
        if [[ "${noinst}" = "false" ]]; then
            gdebi -nq "${pkg}"
        else
            echo "not installing ${pkg} due to wrong SHA256 checksum"
        fi
    fi
}

install_helper () {
    local name="${1}"

    local -n url="${name/-/_}_url"
    local -n sha="${name/-/_}_sha"
    if [ -z "${2}" ]; then
        local filename="${url##*/}"
    else
        local -n filename="${name/-/_}_pkg"
    fi

    download_package "${url}" "${name}" "${sha}" "${filename}"
    install_package "${filename}"
}


handle_packages () {
    mode="${1}"
    shift

    for pkg in "${@}"; do
        noinst=false
        case ${pkg} in
            discord | pixes | zoom-vdi | openrgb-effects | openrgb-hwsync | openrgb-fansync | ulauncher | appimagelauncher | kando )
                install_helper "${pkg}"
            ;;
            zoom | citrix | citrix-usb | citrix-epa | citrix-beta | citrix-usb-beta )
                install_helper "${pkg}" true
            ;;
            * )
                echo "package ${pkg} unknown"
            ;;
        esac
    done
}

user_opt="${1}"
shift

case ${user_opt} in
    download )
        if [[ -z "${@}" ]]; then
            echo "no packages specified, exit."
            exit 0
        else
            handle_packages dl "${@}"
        fi
    ;;

    install )
        if [[ -z "${@}" ]]; then
            echo "no packages specified, exit."
            exit 0
        else
            handle_packages in "${@}"
        fi
    ;;

    list )
        echo "nanolx-orbit supports the following packages: ${package_list}"
    ;;

    clear )
        echo "removing downloaded packages from ${pkg_base}"
        rm -fv "${pkg_base}"/*
    ;;

    help | * )
        echo -e "nanolx-orbit v${version} (${reldate})
© 2026 Christopher Roy Bratusek <nano@jpberlin.de>

licensed under the GNU General Public License v3 (or newer)

usage:
    nanolx-orbit list
    nanolx-orbit download
    nanolx-orbit install
    nanolx-orbit clear
"
    ;;
esac
