#!/usr/bin/env bash
set -euo pipefail

if [[ -n "${PAIRLING_REPO_ROOT:-}" ]]; then
  REPO_ROOT="$PAIRLING_REPO_ROOT"
else
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
fi

read_stamp() {
  local path="$1"
  if [[ -f "$path" ]]; then
    tr -d '[:space:]' < "$path"
  fi
}

if [[ "${1:-}" == "--version" || "${1:-}" == "-v" ]]; then
  version="$(read_stamp "$REPO_ROOT/mac/VERSION")"
  revision="$(read_stamp "$REPO_ROOT/mac/SOURCE_REVISION")"
  version="${version:-unknown}"
  if [[ -n "$revision" ]]; then
    printf 'pairling %s (source %s)\n' "$version" "$revision"
  else
    printf 'pairling %s\n' "$version"
  fi
  exit 0
fi

export PYTHONDONTWRITEBYTECODE=1
unset PYTHONPYCACHEPREFIX

resolve_pairling_python() {
  local candidate marker
  for candidate in \
    "${PAIRLING_DAEMON_PYTHON:-}" \
    "$REPO_ROOT/python/bin/python3" \
    "$(command -v python3 2>/dev/null || true)"; do
    if [[ -n "$candidate" && -x "$candidate" ]]; then
      marker="$("$candidate" -c 'print("pairling-python-ready")' 2>/dev/null || true)"
      [[ "$marker" == "pairling-python-ready" ]] || continue
      printf '%s\n' "$candidate"
      return 0
    fi
  done
  return 1
}


if [[ "${1:-}" == "attach" ]]; then
  shift
  if ! pairling_python="$(resolve_pairling_python)"; then
    printf 'Pairling could not find its runtime Python. Re-run pairling setup.\n' >&2
    exit 127
  fi
  exec "$pairling_python" "$REPO_ROOT/mac/packaging/pairling_attach.py" "$@"
fi

if [[ "${1:-}" == "pairdrop" ]]; then
  shift
  if ! pairling_python="$(resolve_pairling_python)"; then
    printf 'Pairling could not find its runtime Python. Re-run pairling setup.\n' >&2
    exit 127
  fi
  exec "$pairling_python" "$REPO_ROOT/mac/companiond/pairdrop_cli.py" "$@"
fi

if [[ "${1:-}" == "connect-auth-open" ]]; then
  shift || true
  if ! pairling_python="$(resolve_pairling_python)"; then
    printf 'Pairling could not find its runtime Python. Re-run pairling setup.\n' >&2
    exit 127
  fi
  json_mode="false"
  while [[ $# -gt 0 ]]; do
    case "$1" in
      --json)
        json_mode="true"
        shift
        ;;
      --help|-h)
        printf 'usage: pairling connect-auth-open [--json]\n'
        exit 0
        ;;
      *)
        printf 'usage: pairling connect-auth-open [--json]\n' >&2
        exit 2
        ;;
    esac
  done
  helper_status=0
  response_status=1
  output="$("$pairling_python" "$REPO_ROOT/mac/companiond/local_control_client.py" \
    POST /connect/auth/open 2>/dev/null)" || helper_status=$?
  if [[ "$helper_status" == "0" ]] && \
    "$pairling_python" -c 'import json,sys; sys.exit(0 if json.load(sys.stdin).get("ok") else 1)' <<<"$output"; then
    response_status=0
  fi
  if [[ -z "$output" ]]; then
    output='{"ok":false,"opened":false,"auth_url_present":false,"error":{"code":"control_transport_error","message":"Pairling local control socket is unavailable."}}'
  fi
  if [[ "$json_mode" == "true" ]]; then
    printf '%s\n' "$output"
  else
    "$pairling_python" -c 'import json,sys; data=json.load(sys.stdin); error=data.get("error"); message=error.get("message") if isinstance(error,dict) else error; print("Pairling Connect browser approval opened." if data.get("opened") else (message or "Pairling Connect browser approval is not available."))' <<<"$output" >&2
  fi
  exit "$response_status"
fi

exec "$REPO_ROOT/mac/install/install-runtime.sh" "$@"
