#!/bin/sh
set -e

# Install script to install fn

version=`curl --silent https://api.github.com/repos/fnproject/cli/releases/latest  | grep tag_name | cut -f 2 -d : | cut -f 2 -d '"'`

command_exists() {
  command -v "$@" > /dev/null 2>&1
}

case "$(uname -m)" in
  *64)
    ;;
  *)
    echo >&2 'Error: you are not using a 64bit platform.'
    echo >&2 'Functions CLI currently only supports 64bit platforms.'
    exit 1
    ;;
esac

user="$(id -un 2>/dev/null || true)"

sh_c='sh -c'
if [ "$user" != 'root' ]; then
  if command_exists sudo; then
    sh_c='sudo -E sh -c'
  elif command_exists su; then
    sh_c='su -c'
  else
    echo >&2 'Error: this installer needs the ability to run commands as root.'
    echo >&2 'We are unable to find either "sudo" or "su" available to make this happen.'
    exit 1
  fi
fi

curl=''
if command_exists curl; then
  curl='curl -sSL -o'
elif command_exists wget; then
  curl='wget -qO'
elif command_exists busybox && busybox --list-modules | grep -q wget; then
  curl='busybox wget -qO'
else
    echo >&2 'Error: this installer needs the ability to run wget or curl.'
    echo >&2 'We are unable to find either "wget" or "curl" available to make this happen.'
    exit 1
fi

url='https://github.com/fnproject/cli/releases/download'

# perform some very rudimentary platform detection
case "$(uname)" in
  Linux)
    $sh_c "$curl /tmp/fn_linux $url/$version/fn_linux"
    $sh_c "mv /tmp/fn_linux /usr/local/bin/fn"
    $sh_c "chmod +x /usr/local/bin/fn"
    fn --version
    ;;
  Darwin)
    $sh_c "$curl /tmp/fn_mac $url/$version/fn_mac"
    $sh_c "mv /tmp/fn_mac /usr/local/bin/fn"
    $sh_c "chmod +x /usr/local/bin/fn"
    fn --version
    ;;
  WindowsNT)
    $sh_c "$curl $url/$version/fn.exe"
    # TODO how to make executable? chmod? how to do tmp file and move?
    fn.exe --version
    ;;
  *)
    cat >&2 <<'EOF'

  Either your platform is not easily detectable or is not supported by this
  installer script (yet - PRs welcome! [fn/install]).
  Please visit the following URL for more detailed installation instructions:

    https://github.com/fnproject/fn

EOF
    exit 1
esac

cat >&2 <<'EOF'

        ______
       / ____/___
      / /_  / __ \
     / __/ / / / /
    /_/   /_/ /_/`

EOF
exit 0