#!/usr/bin/env bash
# Factory-Defaults-Export – holt eine ZIP vom laufenden OpenCRM und legt sie
# in ./factory-exports/ ab. Dieselbe ZIP, die du auch über die UI bekommst.
#
# Workflow:
#   ./factory-export.sh                          # default: localhost:3010, admin@admin.com
#   OPENCRM_URL=https://crm.example.de \
#   OPENCRM_EMAIL=admin@example.de \
#     ./factory-export.sh                        # gegen die Prod-Instanz
#
# Optional:
#   OPENCRM_PASSWORD=… (sonst wird interaktiv abgefragt)
#
# Die ZIP ist gitignored – du kannst sie via scp transferieren und mit
# ./factory-import.sh auf der anderen Seite einspielen.

set -euo pipefail

URL="${OPENCRM_URL:-http://localhost:3010}"
EMAIL="${OPENCRM_EMAIL:-admin@admin.com}"
PASSWORD="${OPENCRM_PASSWORD:-}"

REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
EXPORT_DIR="$REPO_ROOT/factory-exports"
mkdir -p "$EXPORT_DIR"

if [ -z "$PASSWORD" ]; then
  read -r -s -p "Passwort für $EMAIL @ $URL: " PASSWORD
  echo
fi

echo "→ Login als $EMAIL @ $URL"
LOGIN_RESPONSE="$(curl -sS -X POST "$URL/api/auth/login" \
  -H 'Content-Type: application/json' \
  --data-raw "$(E="$EMAIL" P="$PASSWORD" python3 -c 'import json,os;print(json.dumps({"email":os.environ["E"],"password":os.environ["P"]}))')")"

TOKEN="$(printf '%s' "$LOGIN_RESPONSE" | python3 -c 'import json,sys;d=json.load(sys.stdin);print((d.get("data") or {}).get("token","") or d.get("token",""))')"

if [ -z "$TOKEN" ]; then
  echo "✗ Login fehlgeschlagen. Antwort:"
  echo "$LOGIN_RESPONSE" | head -c 500
  echo
  exit 1
fi

TIMESTAMP="$(date +%Y-%m-%d-%H%M)"
DEST="$EXPORT_DIR/factory-defaults-$TIMESTAMP.zip"

echo "→ Lade ZIP nach $DEST"
HTTP_CODE="$(curl -sS -o "$DEST" -w '%{http_code}' \
  -H "Authorization: Bearer $TOKEN" \
  "$URL/api/factory-defaults/export")"

if [ "$HTTP_CODE" != "200" ]; then
  echo "✗ Export-Endpoint antwortete mit HTTP $HTTP_CODE"
  rm -f "$DEST"
  exit 1
fi

SIZE_KB="$(du -k "$DEST" | cut -f1)"
echo "✓ Export erfolgreich: $DEST (${SIZE_KB} KB)"
echo
echo "Inhalt:"
unzip -l "$DEST" | sed 's/^/    /'
