#!/usr/bin/env bash
set -euo pipefail
SERVICE="danke-hmi.service"
PORT="${DANKE_PORT:-8765}"

echo
echo "=============================================="
echo " DANKE://HMI // PAIR NODE"
echo "=============================================="
echo " Plus simple : ouvre DANKE HMI depuis le menu des applications."

health() { curl -fsS --max-time 1 "http://127.0.0.1:${PORT}/api/health" >/dev/null 2>&1; }
# Ask the daemon, not systemd: it may have been started by hand.
if ! health; then
  echo "Service arrêté. Démarrage..."
  systemctl --user start "$SERVICE" 2>/dev/null || true
  for _ in $(seq 1 40); do health && break; sleep 0.25; done
fi

# 1.6.1: ask the daemon itself (localhost only). Asking (re)starts the 15 min validity.
JSON=""
for _ in 1 2 3 4 5 6; do
  JSON="$(curl -s --max-time 2 "http://127.0.0.1:${PORT}/api/pair/code" 2>/dev/null || true)"
  [ -n "$JSON" ] && break
  sleep 0.5
done
CODE="$(printf '%s' "$JSON" | sed -n 's/.*"code":"\([0-9]\{6\}\)".*/\1/p')"
URL="$(printf '%s' "$JSON" | sed -n 's/.*"url":"\([^"]*\)".*/\1/p')"

if [ -z "$CODE" ]; then
  echo " Le daemon ne répond pas sur 127.0.0.1:${PORT}."
  echo " → systemctl --user status $SERVICE --no-pager"
  echo " → journalctl --user -u $SERVICE -n 40 --no-pager"
  exit 1
fi
if [ -z "$URL" ] || [[ "$URL" == *LAN-IP* ]]; then
  IP="$(ip route get 1.1.1.1 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i=="src"){print $(i+1);exit}}')"
  URL="http://${IP:-$(hostname -I 2>/dev/null | awk '{print $1}')}:${PORT}"
fi

echo
echo " NODE : $(hostname)"
echo " URL  : $URL"
echo " CODE : $CODE"
echo
echo " Valable 15 min à partir de maintenant. Relance danke-hmi-pair pour rafraîchir."
echo " Le code change après chaque appairage réussi. 5 mauvais essais = 60 s de pause."
echo
if command -v qrencode >/dev/null 2>&1; then
  echo " Scanne → appairage en un tap :"
  qrencode -t ANSIUTF8 "${URL}/?code=${CODE}"
  echo
else
  echo " (sudo pacman -S qrencode pour un QR d'appairage)"
  echo
fi
echo "=============================================="
