#!/bin/sh
set -e

install_dir="/usr/local/bin"
add_alias=0
nightly=0

# parse command-line arguments for alias option only
for arg in "$@"; do
  case "$arg" in
    --alias|-a)
      add_alias=1
      ;;
    --nightly|-n)
      nightly=1
      ;;
    *)
      ;;
  esac
done

# prompt for nightly build option if interactive
if [ -t 0 ]; then
  printf "do you want to install a Nightly build? [y/N]: "
  read -r answer_nightly
  if [ "$answer_nightly" = "y" ] || [ "$answer_nightly" = "Y" ]; then
    nightly=1
  fi
fi

if [ "$nightly" -eq 1 ]; then
  repo="neurocyte/flow-nightly"
else
  repo="neurocyte/flow"
fi

# detect os and architecture
os="$(uname -s | tr '[:upper:]' '[:lower:]')"
if [ "$os" = "darwin" ]; then
  os="macos"
fi

arch="$(uname -m)"
case "$arch" in
  x86_64) arch="x86_64" ;;
  arm64) arch="aarch64" ;;
  i686) arch="x86" ;;
  i386) arch="x86" ;;
esac

# get latest version tag from github releases api
version=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | grep '"tag_name":' | cut -d'"' -f4)
[ -z "$version" ] && { echo "failed to fetch latest version"; exit 1; }

# construct download url
# note: nightly assets are named like "flow-<version>-<os>-<arch>.<ext>"
filename="flow-$version-$os-$arch"
ext="tar.gz"
if [ "$os" = "windows" ]; then
  ext="zip"
fi
url="https://github.com/$repo/releases/download/$version/$filename.$ext"

if [ "$nightly" -eq 1 ]; then
  echo "downloading NIGHTLY build $version..."
else
  echo "downloading flow $version..."
fi

curl -fL "$url" -o "/tmp/$filename.$ext"

# simple file size check (adjust threshold if needed)
filesize=$(stat -c%s "/tmp/$filename.$ext" 2>/dev/null || stat -f%z "/tmp/$filename.$ext")
if [ "$filesize" -lt 100 ]; then
  echo "downloaded file appears to be invalid (size: ${filesize} bytes)"
  exit 1
fi

echo "installing $( [ "$nightly" -eq 1 ] && echo 'NIGHTLY build' || echo 'flow')..."
if [ "$ext" = "tar.gz" ]; then
  tar -xzf "/tmp/$filename.$ext" -C "$install_dir"
else
  unzip -o "/tmp/$filename.$ext" -d "$install_dir"
fi

chmod +x "$install_dir/flow"
rm "/tmp/$filename.$ext"
echo "$( [ "$nightly" -eq 1 ] && echo 'NIGHTLY build' || echo 'flow') installed successfully!"

create_alias() {
  if [ -e "$install_dir/f" ]; then
    echo "warning: existing file or alias detected at $install_dir/f, overwriting..."
    rm -f "$install_dir/f"
  fi
  ln -s "$install_dir/flow" "$install_dir/f"
  echo "alias 'f' created successfully!"
}

if [ "$add_alias" -eq 1 ]; then
  create_alias
elif [ -t 0 ]; then
  printf "do you want to create an alias 'f' for 'flow'? [y/N]: "
  read -r answer_alias
  if [ "$answer_alias" = "y" ] || [ "$answer_alias" = "Y" ]; then
    create_alias
  fi
fi
