#!/usr/bin/env bash
set -euo pipefail
# Use a disposable npm prefix and XDG directories. Never point these at your normal OpenCode state.
: "${PROOF_DIR:?Set PROOF_DIR to a disposable directory}"
export XDG_DATA_HOME="$PROOF_DIR/oc-data"
export XDG_CONFIG_HOME="$PROOF_DIR/oc-config"
cli="$PROOF_DIR/cli/bin/opencode"
case "${1:-verify}" in
  install-old)
    npm install -g --prefix "$PROOF_DIR/cli" --allow-scripts=@opencode/cli @opencode/cli@2.2.5
    ;;
  start)
    : "${OPENCODE_SERVER_PASSWORD:?Set a disposable server password}"
    "$cli" serve --hostname 127.0.0.1 --port 14099 > "$PROOF_DIR/external-server.log" 2>&1 &
    echo "$!" > "$PROOF_DIR/external-server.pid"
    ;;
  stop)
    kill "$(cat "$PROOF_DIR/external-server.pid")"
    ;;
  verify)
    "$cli" --version
    curl --fail --silent --user "opencode:${OPENCODE_SERVER_PASSWORD:?}" http://127.0.0.1:14099/api/info |
      python3 -c 'import sys,json; print("Running server version: " + json.load(sys.stdin)["version"])'
    ;;
  *) exit 2 ;;
esac
