#!/usr/bin/env sh
set -eu

VERSION="v0.1.2"
BASE_URL="https://install.disparachat.com/downloads/${VERSION}"
INSTALL_PATH="/usr/local/bin/disparachat-installer"

if [ -t 1 ] && [ -z "${NO_COLOR+x}" ]; then
  color_cyan="$(printf '\033[1;36m')"
  color_green="$(printf '\033[1;32m')"
  color_red="$(printf '\033[1;31m')"
  color_reset="$(printf '\033[0m')"
else
  color_cyan=""
  color_green=""
  color_red=""
  color_reset=""
fi

fail() {
  printf '\n%sErro:%s %s\n' "$color_red" "$color_reset" "$1" >&2
  exit 1
}

[ "$(id -u)" -eq 0 ] || fail "execute com sudo: curl -fsSL https://install.disparachat.com | sudo bash"
[ -r /dev/tty ] || fail "execute o comando em um terminal SSH interativo"

case "$(uname -m)" in
  x86_64|amd64)
    architecture="amd64"
    ;;
  aarch64|arm64)
    architecture="arm64"
    ;;
  *)
    fail "arquitetura nao suportada: $(uname -m); use amd64 ou arm64"
    ;;
esac

for command_name in curl sha256sum install mktemp; do
  command -v "$command_name" >/dev/null 2>&1 || fail "comando obrigatorio nao encontrado: ${command_name}"
done

asset="disparachat-installer-linux-${architecture}"
temporary_dir="$(mktemp -d)"
cleanup() {
  rm -rf -- "$temporary_dir"
}
trap cleanup EXIT HUP INT TERM

printf '%sBaixando DisparaChat Installer%s %s para Linux %s...\n' "$color_cyan" "$color_reset" "$VERSION" "$architecture"
curl -fsSL --retry 3 --retry-delay 2 "${BASE_URL}/${asset}" -o "${temporary_dir}/${asset}"
curl -fsSL --retry 3 --retry-delay 2 "${BASE_URL}/SHA256SUMS" -o "${temporary_dir}/SHA256SUMS"

checksum_line="$(awk -v file="$asset" '$2 == file { print; exit }' "${temporary_dir}/SHA256SUMS")"
[ -n "$checksum_line" ] || fail "checksum do binario nao encontrado"
printf '%s\n' "$checksum_line" | (cd "$temporary_dir" && sha256sum -c -)

install -m 0755 "${temporary_dir}/${asset}" "$INSTALL_PATH"
printf '%s✓%s Binario verificado e instalado em %s.\n\n' "$color_green" "$color_reset" "$INSTALL_PATH"

exec "$INSTALL_PATH" install </dev/tty
