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

export NVR_PACKAGE_URL="${NVR_PACKAGE_URL:-https://simplavende.com.br/suporte/nvr_monorepo_complete_final_20260612_appliance_dashboard.zip}"
export NVR_PACKAGE_SHA256="${NVR_PACKAGE_SHA256:-}"

if [ "$(id -u)" -ne 0 ]; then
  exec sudo -E bash "$0" "$@"
fi

tmp_dir="$(mktemp -d /tmp/nvr-dashboard-installer.XXXXXX)"
cleanup() {
  case "${tmp_dir:-}" in
    /tmp/nvr-dashboard-installer.*)
      rm -rf "$tmp_dir"
      ;;
  esac
}
trap cleanup EXIT

zip_path="$tmp_dir/nvr.zip"
sha_path="$tmp_dir/nvr.zip.sha256"
if command -v curl >/dev/null 2>&1; then
  curl -fsSL "$NVR_PACKAGE_URL" -o "$zip_path"
  if [ -z "$NVR_PACKAGE_SHA256" ]; then
    curl -fsSL "${NVR_PACKAGE_URL}.sha256" -o "$sha_path"
  fi
elif command -v wget >/dev/null 2>&1; then
  wget -qO "$zip_path" "$NVR_PACKAGE_URL"
  if [ -z "$NVR_PACKAGE_SHA256" ]; then
    wget -qO "$sha_path" "${NVR_PACKAGE_URL}.sha256"
  fi
else
  echo "instalar-dashboard-nvr: curl ou wget precisa estar instalado" >&2
  exit 1
fi

if [ -z "$NVR_PACKAGE_SHA256" ]; then
  NVR_PACKAGE_SHA256="$(awk 'NF {print $1; exit}' "$sha_path" | tr 'A-F' 'a-f')"
fi
[ -n "$NVR_PACKAGE_SHA256" ] || {
  echo "instalar-dashboard-nvr: SHA256 esperado ausente" >&2
  exit 1
}

actual_sha="$(sha256sum "$zip_path" | awk '{print $1}' | tr 'A-F' 'a-f')"
expected_sha="$(printf '%s' "$NVR_PACKAGE_SHA256" | tr 'A-F' 'a-f')"
if [ "$actual_sha" != "$expected_sha" ]; then
  echo "instalar-dashboard-nvr: SHA256 do pacote nao confere" >&2
  exit 1
fi

mkdir -p "$tmp_dir/extract"
unzip -q "$zip_path" -d "$tmp_dir/extract"
installer="$tmp_dir/extract/nvr/scripts/appliance/update-nvr-appliance-dashboard.sh"
if [ ! -x "$installer" ]; then
  chmod +x "$installer" 2>/dev/null || true
fi
[ -x "$installer" ] || {
  echo "instalar-dashboard-nvr: atualizador ausente no pacote" >&2
  exit 1
}

exec bash "$installer"
