#!/usr/bin/env bash
# Rebreak Native — Build standalone iOS Release on connected iPhone.
# Bundle ist eingebettet → läuft OHNE Metro / OHNE WiFi-zum-Mac.
# Backend zeigt auf staging.rebreak.org (siehe extra.apiUrl in app.config.ts).
#
# Usage:
#   ./install-ios.sh            # Release-Build + Install + Launch
#   ./install-ios.sh --debug    # Debug-Build (braucht Metro!) — nur fürs Testen
#
# Voraussetzungen (einmalig):
#   - Xcode installiert + Apple-ID in Xcode → Settings → Accounts hinzugefügt
#   - iPhone via USB angeschlossen, "Diesem Computer vertrauen?" bestätigt
#   - In Xcode: Window → Devices and Simulators → iPhone → 'Use for Development'
#   - Auf iPhone (nach erstem Install): Einstellungen → Allgemein → VPN & Geräteverwaltung
#     → Apple-Dev-Profil "Vertrauen"
#
# Free-Apple-Account-Hinweis: Release-Build läuft 7 Tage, danach muss neu installiert werden.
# Mit Paid Developer Account: 1 Jahr.
set -euo pipefail

cd "$(dirname "$0")"

CONFIGURATION="Release"
while [[ $# -gt 0 ]]; do
  case "$1" in
    --debug) CONFIGURATION="Debug"; shift ;;
    -h|--help) awk '/^#!/{next} /^#/{sub(/^# ?/, ""); print; next} {exit}' "$0"; exit 0 ;;
    *) echo "Unbekanntes Flag: $1"; exit 1 ;;
  esac
done

if ! command -v xcrun >/dev/null 2>&1; then
  echo "Xcode Command-Line-Tools fehlen. Installieren:"
  echo "  xcode-select --install"
  exit 1
fi

# Device-Detection via xctrace.
# == Devices ==          → physisch connected + entsperrt + trusted
# == Devices Offline ==  → schon mal gepairt, aber gerade nicht erreichbar
#                          (iPhone gesperrt, abgesteckt, oder Trust-Dialog wartet)
XCTRACE_OUT=$(xcrun xctrace list devices 2>&1)

ONLINE=$(printf '%s\n' "$XCTRACE_OUT" \
  | awk '/^== Devices ==/{f=1; next} /^== /{f=0} f' \
  | grep -E "iPhone|iPad" || true)

OFFLINE=$(printf '%s\n' "$XCTRACE_OUT" \
  | awk '/^== Devices Offline ==/{f=1; next} /^== /{f=0} f' \
  | grep -E "iPhone|iPad" || true)

if [[ -z "$ONLINE" ]]; then
  echo "Kein iPhone/iPad ONLINE."
  if [[ -n "$OFFLINE" ]]; then
    echo ""
    echo "Aber diese Geräte sind gepairt aber offline:"
    printf '%s\n' "$OFFLINE" | sed 's/^/  /'
    echo ""
    echo "Häufigste Ursachen:"
    echo "  1. iPhone ist gesperrt → entsperren, Mac wartet darauf"
    echo "  2. Kabel nur Strom, keine Daten → anderes Kabel probieren"
    echo "  3. 'Diesem Computer vertrauen?'-Dialog → bestätigen"
    echo "  4. Erst kürzlich angesteckt → 5-10 Sek warten und erneut probieren"
  else
    echo ""
    echo "Setup nötig:"
    echo "  - iPhone via USB-Kabel anschließen + entsperren"
    echo "  - 'Diesem Computer vertrauen?' am iPhone bestätigen"
    echo "  - Xcode öffnen, dort einmalig 'Use for Development' aktivieren"
  fi
  exit 1
fi
echo "→ Gerät online: $(printf '%s\n' "$ONLINE" | head -1)"

echo "→ Building iOS $CONFIGURATION bundle + installing on device..."
echo "  (erster Release-Build dauert 5-10 min wegen Pod-Install + Bundle)"
echo ""

# expo run:ios kümmert sich um Pods + xcodebuild + Code-Signing + Install + Launch.
# --device wählt ein USB-Gerät statt Simulator.
# --configuration Release embeddet das JS-Bundle → keine Metro-Verbindung nötig.
npx expo run:ios --device --configuration "$CONFIGURATION"

echo ""
echo "Fertig — App läuft jetzt standalone auf deinem iPhone."
if [[ "$CONFIGURATION" == "Release" ]]; then
  echo "Backend: https://staging.rebreak.org (siehe extra.apiUrl in app.config.ts)"
  echo "Free-Account: 7 Tage gültig, danach Skript erneut laufen lassen."
fi
