#!/usr/bin/env bash
set -euo pipefail

RUSTDESK_VERSION="1.4.8"
RUSTDESK_HOST="rustdesk.agenciacafeonline.com.br"
RUSTDESK_DEB_SHA256="0663487c2e5c976b686038cf295154ac9de7709628729dbb45a01f8e0da431d7"
RUSTDESK_DOWNLOAD_URL="https://rustdesk.agenciacafeonline.com.br/raspberry/deb"
RUSTDESK_CONFIG_ARGUMENT="rustdesk-host=rustdesk.agenciacafeonline.com.br:21116,key=N9RDqN7OsKEahFsBdi2ENGltR8oNcJ45GUVVqASYrZM=,relay=rustdesk.agenciacafeonline.com.br:21117,"

if [[ $EUID -ne 0 ]]; then
  echo "Execute este instalador com sudo."
  exit 1
fi

ARCH="$(uname -m)"
case "$ARCH" in
  aarch64|arm64) ;;
  *)
    echo "Arquitetura não suportada: $ARCH. Este instalador exige Raspberry Pi OS 64 bits."
    exit 1
    ;;
esac

if [[ ! -r /etc/os-release ]]; then
  echo "Não foi possível identificar o sistema operacional."
  exit 1
fi

ID_LIKE=""
. /etc/os-release
DISTRO_INFO="$ID $ID_LIKE"
if [[ "$DISTRO_INFO" != *debian* ]] && [[ "$DISTRO_INFO" != *ubuntu* ]] && [[ "$DISTRO_INFO" != *raspbian* ]]; then
  echo "Sistema não suportado: $DISTRO_INFO. Use Raspberry Pi OS ou outro Debian/Ubuntu ARM64."
  exit 1
fi

for command_name in sha256sum apt-get systemctl; do
  if ! command -v "$command_name" >/dev/null 2>&1; then
    echo "Comando obrigatório ausente: $command_name"
    exit 1
  fi
done

TEMP_DIR="$(mktemp -d /tmp/rustdesk-cafe-raspberry.XXXXXX)"
DEB_PATH="$TEMP_DIR/rustdesk-$RUSTDESK_VERSION-aarch64.deb"
cleanup() {
  rm -f "$DEB_PATH"
  rmdir "$TEMP_DIR" 2>/dev/null || true
}
trap cleanup EXIT

if command -v curl >/dev/null 2>&1; then
  curl -fL --retry 3 --connect-timeout 20 -o "$DEB_PATH" "$RUSTDESK_DOWNLOAD_URL"
elif command -v wget >/dev/null 2>&1; then
  wget -O "$DEB_PATH" "$RUSTDESK_DOWNLOAD_URL"
else
  echo "Instale curl ou wget antes de continuar."
  exit 1
fi

printf '%s  %s
' "$RUSTDESK_DEB_SHA256" "$DEB_PATH" | sha256sum -c -
apt-get install -y "$DEB_PATH"

/usr/bin/rustdesk --config "$RUSTDESK_CONFIG_ARGUMENT"
systemctl enable rustdesk >/dev/null
systemctl restart rustdesk
sleep 3

CONFIGURED_SERVER="$(/usr/bin/rustdesk --option custom-rendezvous-server)"
if [[ "$CONFIGURED_SERVER" != "$RUSTDESK_HOST:21116" ]]; then
  echo "A configuração do servidor não foi confirmada. Valor atual: $CONFIGURED_SERVER"
  exit 1
fi

RUSTDESK_ID="$(/usr/bin/rustdesk --get-id || true)"
echo
echo "RustDesk Café Online instalado e configurado."
if [[ -n "$RUSTDESK_ID" ]]; then
  echo "ID deste Raspberry Pi: $RUSTDESK_ID"
else
  echo "Abra o RustDesk no ambiente gráfico para visualizar o ID."
fi
