#!/usr/bin/env bash
# Phase 7.x — Mac-Variante: SSH-Tunnel-Setup
# Doppelklick im Finder oeffnet diese Datei im Terminal (chmod +x).
#
# 1. Generiert dedizierten Ed25519-Tunnelkey (~/.ssh/phase7x_tunnel_ed25519)
#    falls noch nicht vorhanden.
# 2. Postet den Public-Key an /tunnel/register, bekommt zugewiesenen
#    Reverse-Port aus dem Pool (22222..22240) zurueck.
# 3. Baut Reverse-Tunnel auf: localhost:22 dieses Macs → bridge.xxbillion.ai:<port>.
#    Damit erreicht der Agent diesen Mac via `ssh -p <port> root@127.0.0.1`
#    (von bridge.xxbillion.ai aus) — ohne dass dein Router/Firewall etwas
#    konfiguriert sein muss.

set -u

REG_URL="${REG_URL:-https://bridge.xxbillion.ai/tunnel/register}"
SSH_HOST="${SSH_HOST:-bridge.xxbillion.ai}"
SSH_USER="${SSH_USER:-root}"
KEY="$HOME/.ssh/phase7x_tunnel_ed25519"
DEVICE_LABEL="${DEVICE_LABEL:-$(hostname -s)}"

mkdir -p "$HOME/.ssh"
chmod 700 "$HOME/.ssh"

echo "==============================================="
echo "  Phase 7.x SSH-Tunnel-Setup (Mac)"
echo "==============================================="
echo

if [ ! -f "$KEY" ]; then
    echo "→ Erzeuge Tunnel-Key ($KEY)"
    ssh-keygen -t ed25519 -f "$KEY" -N "" -C "phase7x-mac-tunnel-$(date -u +%Y%m%d)" -q
fi
chmod 600 "$KEY"
chmod 644 "$KEY.pub"
echo "Pubkey:"
cat "$KEY.pub"
echo

echo "→ Registriere Pubkey bei ${REG_URL} (device=${DEVICE_LABEL})"
RESP=$(curl -s -X POST \
  -H "Content-Type: text/plain" \
  --data-binary "$(cat $KEY.pub)" \
  "${REG_URL}?device=$(echo "${DEVICE_LABEL}" | tr ' ' '_')")
echo "Response:"
echo "$RESP" | python3 -m json.tool 2>/dev/null || echo "$RESP"
echo

TUNNEL_PORT=$(echo "$RESP" | python3 -c "import sys,json; print(json.load(sys.stdin).get('tunnel_remote_port',''))" 2>/dev/null)

if [ -z "$TUNNEL_PORT" ]; then
    echo "✗ Konnte keinen Tunnel-Port erhalten. Antwort prüfen."
    echo "Fenster bleibt offen — Enter zum Schliessen."
    read -r _
    exit 1
fi

echo "→ Zugewiesener Reverse-Port: ${TUNNEL_PORT}"
echo

# host-key check: bei erstem mal automatisch akzeptieren (TOFU)
KNOWN="$HOME/.ssh/known_hosts"
if ! ssh-keygen -F "${SSH_HOST}" -f "${KNOWN}" >/dev/null 2>&1; then
    echo "→ Hole SSH-Hostkey von ${SSH_HOST} (TOFU)"
    ssh-keyscan -H "${SSH_HOST}" >> "${KNOWN}" 2>/dev/null
fi

CMD="ssh -i \"${KEY}\" -fN -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes -R ${TUNNEL_PORT}:127.0.0.1:22 ${SSH_USER}@${SSH_HOST}"

echo "→ Starte Tunnel:"
echo "   $CMD"
echo
ssh -i "${KEY}" -fN \
    -o ServerAliveInterval=30 -o ServerAliveCountMax=3 \
    -o ExitOnForwardFailure=yes \
    -R "${TUNNEL_PORT}:127.0.0.1:22" \
    "${SSH_USER}@${SSH_HOST}"
RC=$?

if [ $RC -eq 0 ]; then
    echo "✓ Tunnel aktiv. Agent erreicht diesen Mac jetzt via:"
    echo "    ssh -p ${TUNNEL_PORT} $(id -un)@127.0.0.1   # auf bridge.xxbillion.ai"
    echo
    echo "Beenden mit:  pkill -f 'ssh.*-R ${TUNNEL_PORT}:127.0.0.1:22'"
else
    echo "✗ Tunnel-Start fehlgeschlagen (rc=$RC)"
fi
echo
echo "Fenster bleibt offen — Enter zum Schliessen."
read -r _
