#!/bin/bash
# install-mac-autopush.sh
# Einmalige Installation des LaunchAgents für mac-tunnel-autopush am Mac.
# Lädt Script, schreibt korrekte plist mit User-Pfaden + PATH, lädt via bootstrap.

set -e

SCRIPT="$HOME/mac-tunnel-autopush.sh"
PLIST="$HOME/Library/LaunchAgents/com.raumkommander.mactunnel.plist"
LABEL="com.raumkommander.mactunnel"
UID_NUM=$(id -u)

echo "[1/6] Script herunterladen → $SCRIPT"
mkdir -p "$HOME/Library/LaunchAgents"
curl -fsSL https://files.raumkommander.at/mac-tunnel-autopush.sh -o "$SCRIPT"
chmod +x "$SCRIPT"

echo "[2/6] cloudflared/brew suchen"
CF_BIN=$(command -v cloudflared || true)
BREW_BIN=$(command -v brew || true)
if [ -z "$CF_BIN" ]; then
  echo "❌ cloudflared nicht gefunden. Installier es: brew install cloudflared"
  exit 1
fi
PATH_LIST="$(dirname "$CF_BIN")"
[ -n "$BREW_BIN" ] && PATH_LIST="$PATH_LIST:$(dirname "$BREW_BIN")"
PATH_LIST="$PATH_LIST:/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"
echo "    cloudflared: $CF_BIN"
echo "    PATH:        $PATH_LIST"

echo "[2b/6] Ollama auf KEEP_ALIVE=-1 + Listen-on-0.0.0.0 konfigurieren"
# Permanente Defaults via launchctl setenv (überlebt Login)
launchctl setenv OLLAMA_KEEP_ALIVE -1
launchctl setenv OLLAMA_HOST 0.0.0.0:11434
# Für brew services: ENV-Vars persistieren
if [ -n "$BREW_BIN" ]; then
  OLLAMA_PLIST="$HOME/Library/LaunchAgents/homebrew.mxcl.ollama.plist"
  if [ -f "$OLLAMA_PLIST" ]; then
    # ENV-Block in ollama-plist injizieren (idempotent)
    if ! grep -q "OLLAMA_KEEP_ALIVE" "$OLLAMA_PLIST" 2>/dev/null; then
      /usr/libexec/PlistBuddy -c "Delete :EnvironmentVariables" "$OLLAMA_PLIST" 2>/dev/null || true
      /usr/libexec/PlistBuddy -c "Add :EnvironmentVariables dict" "$OLLAMA_PLIST"
      /usr/libexec/PlistBuddy -c "Add :EnvironmentVariables:OLLAMA_KEEP_ALIVE string -1" "$OLLAMA_PLIST"
      /usr/libexec/PlistBuddy -c "Add :EnvironmentVariables:OLLAMA_HOST string 0.0.0.0:11434" "$OLLAMA_PLIST"
      echo "    ✅ Ollama-plist erweitert (KEEP_ALIVE=-1, HOST=0.0.0.0:11434)"
      brew services restart ollama >/dev/null 2>&1 || true
    else
      echo "    (Ollama-plist hat bereits KEEP_ALIVE-Eintrag)"
    fi
  fi
fi

echo "[3/6] Alte Instanz entfernen (falls vorhanden)"
launchctl bootout "gui/$UID_NUM/$LABEL" 2>/dev/null || true
rm -f "$PLIST"

echo "[4/6] plist schreiben → $PLIST"
cat > "$PLIST" <<PLISTEOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>$LABEL</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/bash</string>
    <string>$SCRIPT</string>
  </array>
  <key>EnvironmentVariables</key>
  <dict>
    <key>PATH</key>
    <string>$PATH_LIST</string>
    <key>HOME</key>
    <string>$HOME</string>
  </dict>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <true/>
  <key>ThrottleInterval</key>
  <integer>30</integer>
  <key>StandardOutPath</key>
  <string>$HOME/mactunnel.out.log</string>
  <key>StandardErrorPath</key>
  <string>$HOME/mactunnel.err.log</string>
</dict>
</plist>
PLISTEOF

echo "[5/6] LaunchAgent laden (bootstrap)"
launchctl bootstrap "gui/$UID_NUM" "$PLIST"
launchctl enable "gui/$UID_NUM/$LABEL"
launchctl kickstart -k "gui/$UID_NUM/$LABEL"

echo "[6/6] Status"
sleep 2
launchctl print "gui/$UID_NUM/$LABEL" 2>/dev/null | grep -E "state|last exit|pid" | head -5 || echo "  (noch nicht geladen — siehe Logs)"

echo ""
echo "✅ Fertig. Logs live mitschauen:"
echo "    tail -f $HOME/mactunnel.out.log"
echo ""
echo "Manuell prüfen:"
echo "    launchctl print gui/$UID_NUM/$LABEL | head -30"
