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

#=== main function ============================================================
# NAME:         main
# DESCRIPTION:  Display usage information for this script.
# PARAMETERS:   see usage function
#==============================================================================
main() {
  local cmd=""
  local ret=0

  case "$1" in
  -v | --version)
    printf "Package bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.1\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.csv
  else
    yay -Su --needed - <packages.csv
  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 boostrap ........................................................"
  if ! "$unattended"; then
    check_consent
  fi
  echo "Installing yay ............................................................"
  install_yay
  echo "Installing apps ..........................................................."
  update_repos "$unattended"
  install_packages "$unattended"
  echo "Done ......................................................................"
}

main "$@"