#!/usr/bin/env bash
# Haila Camera NVR / edge box — one-shot installer.
# curl -fsSL https://install.dvr.haila.space | sudo bash
set -euo pipefail

ORIGIN="${HAILA_EDGE_SERVER_URL:-https://srv770042.hstgr.cloud:1984}"
INSTALL_DIR="${HAILA_EDGE_INSTALL_DIR:-/opt/haila-camera-edge-box}"
BUNDLE_URL="${ORIGIN%/}/install/nvr.tar.gz"

if [[ "${EUID}" -ne 0 ]]; then
  echo "Re-run as root: curl -fsSL https://install.dvr.haila.space | sudo bash" >&2
  exit 1
fi

export DEBIAN_FRONTEND=noninteractive

if ! command -v docker >/dev/null 2>&1 || ! docker compose version >/dev/null 2>&1; then
  echo "Installing Docker Engine + Compose…"
  apt-get update -y
  apt-get install -y ca-certificates curl
  curl -fsSL https://get.docker.com | sh
fi

if ! docker compose version >/dev/null 2>&1; then
  echo "Docker Compose plugin is missing after install." >&2
  exit 1
fi

mkdir -p "${INSTALL_DIR}"
TMP="$(mktemp /tmp/haila-edge-XXXXXX.tar.gz)"
trap 'rm -f "${TMP}"' EXIT

echo "Downloading edge box from ${BUNDLE_URL}"
curl -fsSL "${BUNDLE_URL}" -o "${TMP}"
tar -xzf "${TMP}" -C "${INSTALL_DIR}"

cd "${INSTALL_DIR}"
if [[ ! -f docker-compose.yml ]]; then
  echo "Bundle did not contain docker-compose.yml" >&2
  exit 1
fi

if [[ ! -f .env ]]; then
  cat > .env <<EOF
HAILA_EDGE_SERVER_URL=${ORIGIN}
HAILA_EDGE_SYNC_WAIT_SECONDS=25
HAILA_EDGE_HEARTBEAT_SECONDS=30
HAILA_EDGE_HAILO_ENABLED=false
EOF
fi

mkdir -p config
[[ -f config/frigate.yml ]] || cat > config/frigate.yml <<'EOF'
mqtt:
  host: mosquitto
  port: 1883
cameras: {}
EOF
# Agent runs as uid 10001 and rewrites Frigate/go2rtc config on this bind mount.
chown -R 10001:10001 config
chmod -R u+rwX config

COMPOSE=(docker compose -f docker-compose.yml)
if [[ -e /dev/hailo0 && -f docker-compose.hailo.yml ]]; then
  COMPOSE+=(-f docker-compose.hailo.yml)
  sed -i 's/^HAILA_EDGE_HAILO_ENABLED=.*/HAILA_EDGE_HAILO_ENABLED=true/' .env
  echo "Detected /dev/hailo0 — Hailo detector enabled."
fi

"${COMPOSE[@]}" pull
"${COMPOSE[@]}" build agent
"${COMPOSE[@]}" up -d

echo
echo "Waiting for association code…"
for _ in $(seq 1 60); do
  logs="$("${COMPOSE[@]}" logs --no-color --no-log-prefix agent 2>/dev/null || true)"
  code="$(printf '%s\n' "${logs}" | sed -n 's/.*PAIR THIS EDGE BOX IN HAILA: //p' | tail -n 1)"
  if [[ -n "${code}" ]]; then
    echo
    echo "=========================================="
    echo "  Pair this NVR in web.haila.app"
    echo "  Code: ${code}"
    echo "=========================================="
    echo
    echo "Logs:  cd ${INSTALL_DIR} && docker compose logs -f agent"
    exit 0
  fi
  if printf '%s\n' "${logs}" | grep -q "Pairing server unavailable"; then
    echo "Cloud pairing API not reachable at ${ORIGIN}." >&2
    echo "Check TLS and that haila-camera-edge-box-server is running." >&2
  fi
  sleep 2
done

echo "Stack started, but no pairing code yet. Run:"
echo "  cd ${INSTALL_DIR} && docker compose logs -f agent"
