#!/bin/bash
#
# Simple app bootstrapping script

#=== main function ============================================================
# NAME:         main
# DESCRIPTION:  Display usage information for this script.
# PARAMETERS:   see usage function
#==============================================================================
packages="${BOOTSTRAP_PACKAGES:-packages.txt}"

main() {
    local cmd=""
    local ret=0

    case "$1" in
    -v | --version)
        printf "Package bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.3\n"
        ;;
    -h | --help)
        printf "Usage: install [-f|--force][-v|--version][-h|--help]\n\n-f     Do not ask for any confirmations but force update and installation.\n"
        ;;
    -f | --force)
        install true
        ;;
    *)
        install false
        ;;
    esac
    shift

    $cmd "$@"
    ret=$((ret + $?))
    exit $ret
}

install_yay() {
    # check for existing yay installation
    if type yay >/dev/null 2>&1; then
        echo "Existing yay installation found ..........................................."
        return
    fi

    # use tmp dir to make yay
    target=$(mktemp -d)
    git clone https://aur.archlinux.org/yay.git "$target"
    cd "$target" || exit
    makepkg -si
}

update_repos() {
    unattended="$1"
    if "$unattended"; then
        yay -Sqyy --noconfirm
    else
        yay -Syy
    fi
}

install_packages() {
    unattended="$1"
    if "$unattended"; then
        yay -Squ --noconfirm --needed - <"$packages"
    else
        yay -Su --needed - <"$packages"
    fi
}

check_consent() {
    echo "This will take a while and install many packages. Proceed [y/N]?"
    read -r yes
    if [[ "$yes" != y* ]]; then
        echo "Exiting."
        exit
    fi
}

install() {
    unattended=$1
    echo "Beginning package bootstrap ..............................................."
    if ! "$unattended"; then
        check_consent
    fi
    echo "Installing yay ............................................................"
    install_yay
    echo "Installing apps ..........................................................."
    update_repos "$unattended"
    install_packages "$unattended"
    echo "Done ......................................................................"
}

main "$@"
