#!/bin/sh

set -eu
umask 077

download_base=${PORTA_AGENT_DOWNLOAD_BASE_URL:-https://download.porta.uwucocoa.moe/latest}

while [ "$#" -gt 0 ]; do
  case "$1" in
    --download-base)
      shift
      if [ "$#" -eq 0 ]; then
        echo 'Missing value for --download-base' >&2
        exit 64
      fi
      download_base=$1
      ;;
    --help)
      echo 'Usage: install-agent.sh [--download-base URL]'
      exit 0
      ;;
    *)
      echo "Unknown option: $1" >&2
      exit 64
      ;;
  esac
  shift
done

case "$download_base" in
  https://*) ;;
  *)
    echo 'The download base must use HTTPS' >&2
    exit 64
    ;;
esac

if [ "$(id -u)" -ne 0 ]; then
  echo "Run this installer as root, for example: curl --proto '=https' --tlsv1.2 -fsSL https://porta.uwucocoa.moe/install-agent.sh | sudo sh" >&2
  exit 77
fi

for command_name in curl sha256sum apt-get systemctl; do
  if ! command -v "$command_name" >/dev/null 2>&1; then
    echo "Required command is unavailable: $command_name" >&2
    exit 69
  fi
done

case "$(uname -m)" in
  x86_64|amd64) package_name=porta-agent_amd64.deb ;;
  aarch64|arm64) package_name=porta-agent_arm64.deb ;;
  *)
    echo "Unsupported Linux architecture: $(uname -m)" >&2
    exit 65
    ;;
esac

download_base=${download_base%/}
checksum_name=$package_name.sha256
temporary_root=${TMPDIR:-/tmp}
staging_directory=$(mktemp -d "$temporary_root/porta-agent-install.XXXXXX")

cleanup() {
  rm -rf "$staging_directory"
}
trap cleanup EXIT HUP INT TERM

curl --proto '=https' --tlsv1.2 --fail --silent --show-error --location \
  --output "$staging_directory/$package_name" \
  "$download_base/$package_name"
curl --proto '=https' --tlsv1.2 --fail --silent --show-error --location \
  --output "$staging_directory/$checksum_name" \
  "$download_base/$checksum_name"

(cd "$staging_directory" && sha256sum --check "$checksum_name")
DEBIAN_FRONTEND=noninteractive apt-get install --yes "$staging_directory/$package_name"
systemctl enable --now porta-agent.service

echo 'Porta Agent is installed and running locally.'
echo 'Remote access remains disabled until you select an interface with porta-agent remote enable.'
porta-agent status
echo
echo 'Next steps:'
echo '  sudo porta-agent interfaces'
echo '  sudo porta-agent remote enable --interface INTERFACE_ID --port 57421'
echo '  sudo porta-agent invite create --output /root/porta-invitation.porta-pairing'
