#!/bin/bash
# author: jbsathler
 
INSTALLER_VERSION='v1.0.0'

function help {
  echo "just-installer "$INSTALLER_VERSION
  echo ""
  echo "Use:"
  echo "  just-installer $(color GREEN)<option>$(color DEFAULT)"
  echo ""
  echo "Where:"
  echo " - $(color GREEN)option$(color DEFAULT):"
  echo "   $(color LIGHT_GREEN)-h --help      $(color DEFAULT)- Shows this help screen (default option)."
  echo "   $(color LIGHT_GREEN)-l --latest    $(color DEFAULT)- shows the lastest version available of just."
  echo "   $(color LIGHT_GREEN)-i --install   $(color DEFAULT)- installs the lastest version available of just."
  echo "   $(color LIGHT_GREEN)-u --uninstall $(color DEFAULT)- uninstalls just from your system."
  echo ""
}

function getJustVersions {
  if command -v just >/dev/null 2>&1; then
    out=$(just --version 2>/dev/null)
    LOCAL_VERSION=${out#just }
  else
    LOCAL_VERSION='Not installed'
  fi

  LATEST_VERSION=$(curl -s "https://api.github.com/repos/casey/just/releases/latest" | grep -Po '"tag_name": "\K[0-9.]+')
}

function showLatestVersion {
  getJustVersions

  if [ "$LOCAL_VERSION" == "$LATEST_VERSION" ]; then
    echo "You have the latest version of just installed: $(color GREEN)$LOCAL_VERSION$(color DEFAULT)"
  else
    echo "There is a newer version of just available to install: $(color YELLOW)$LATEST_VERSION$(color DEFAULT) (version installed: $(color RED)$LOCAL_VERSION$(color DEFAULT))"
  fi
}

function installJust {
  getJustVersions

  if [ "$LOCAL_VERSION" == "$LATEST_VERSION" ]; then
    echo "You already have the latest version of just installed: $(color GREEN)$LOCAL_VERSION$(color DEFAULT)"
  else
    echo "Installing $(color GREEN)just $LATEST_VERSION$(color DEFAULT)..."

    wget -qO just.tar.gz https://github.com/casey/just/releases/latest/download/just-$LATEST_VERSION-x86_64-unknown-linux-musl.tar.gz
    sudo tar xf just.tar.gz -C /usr/local/bin just
    rm -rf just.tar.gz

    echo "$(color GREEN)$(just --version)$(color DEFAULT) installed."
  fi
}

function uninstallJust {
  sudo rm -rf /usr/local/bin/just

  echo "$(color GREEN)just$(color DEFAULT) was uninstalled from your system."
}
  
function color {
  local COLOR=$1
  declare -A COLORS
  COLORS[BLACK]="0;30"
  COLORS[DARK_GRAY]="1;30"
  COLORS[RED]="0;31"
  COLORS[LIGHT_RED]="1;31"
  COLORS[GREEN]="0;32"
  COLORS[LIGHT_GREEN]="1;32"
  COLORS[BROWN]="0;33"
  COLORS[ORANGE]="0;33"
  COLORS[YELLOW]="1;33"
  COLORS[BLUE]="0;34"
  COLORS[LIGHT_BLUE]="1;34"
  COLORS[PURPLE]="0;35"
  COLORS[LIGHT_PURPLE]="1;35"
  COLORS[CYAN]="0;36"
  COLORS[LIGHT_CYAN]="1;36"
  COLORS[LIGHT_GRAY]="0;37"
  COLORS[WHITE]="1;37"
  COLORS[DEFAULT]="0"
 
  echo -e "\033[${COLORS[$COLOR]}m"
}

function main {
  case "$1" in
    -l|--latest)
      showLatestVersion
      ;;

    -i|--install)
      installJust
      ;;

    -u|--uninstall)
      uninstallJust
      ;;

    -h|--help|*)
      help
      ;;
  esac
}
 
main $1 $2
