#!/bin/bash

###Updates pivpn scripts (Not PiVPN)
###Main Vars
pivpnrepo="https://github.com/pivpn/pivpn.git"
pivpnlocalpath="/etc/.pivpn"
pivpnscripts="/opt/pivpn/"
bashcompletiondir="/etc/bash_completion.d/"


###Functions
##Updates scripts
updatepivpnscripts(){
    ##We don't know what sort of changes users have made.
    ##Lets remove first /etc/.pivpn dir then clone it back again
    echo "going do update PiVPN Scripts"
    if [[ -d "$pivpnlocalpath" ]]; then
      if [[ -n "$pivpnlocalpath" ]]; then
        sudo rm -rf "${pivpnlocalpath}/../.pivpn"
        cloneandupdate
			fi
    else
      cloneandupdate
    fi
    echo "PiVPN Scripts have been updated"
}

##Updates scripts using test branch
updatefromtest(){
    ##We don't know what sort of changes users have made.
    ##Lets remove first /etc/.pivpn dir then clone it back again
    echo "PiVPN Scripts updating from test branch"
    if [[ -d "$pivpnlocalpath" ]]; then
      if [[ -n "$pivpnlocalpath" ]]; then
        rm -rf "{$pivpnlocalpath}/../.pivpn"
        cloneupdttest
      fi
    else
      cloneupdttest
    fi
    echo "PiVPN Scripts updated have been updated from test branch"
  }

##Clone and copy pivpn scripts to /op/
cloneandupdate(){
  sudo git clone "$pivpnrepo" "$pivpnlocalpath"
  sudo cp "${pivpnlocalpath}"/scripts/*.sh "$pivpnscripts"
  sudo cp "${pivpnlocalpath}"/scripts/bash-completion "$bashcompletiondir"
}

##same as cloneandupdate() but from test branch
##and falls back to master branch again after updating
cloneupdttest(){
  sudo git clone "$pivpnrepo" "$pivpnlocalpath"
  sudo git -C "$pivpnlocalpath" checkout test
  sudo git -C "$pivpnlocalpath" pull origin test
  sudo cp "${pivpnlocalpath}"/scripts/*.sh "$pivpnscripts"
  sudo cp "${pivpnlocalpath}"/scripts/bash-completion "$bashcompletiondir"
  sudo git -C "$pivpnlocalpath" checkout master
}

scriptusage(){
    echo -e "Updates pivpn scripts,

              Usage:
              pivpn update              | updates from master branch
              pivpn update -t or --test | updates from test branch"
}

## SCRIPT

if [[ $# -eq 0 ]]; then
    updatepivpnscripts
else
  while true; do
    case "$1" in
      -t|--test|test)
          updatefromtest
          exit 0
          ;;
      -h|--help|help)
          scriptusage
          exit 0
          ;;
      * )
        updatepivpnscripts
        exit 0
        ;;
    esac
  done
fi