#!/usr/bin/env bash
# zo-swamp — Unified CLI wrapper for Swamp on Zo Computer
# Usage: zo-swamp <command> [args...]
set -euo pipefail

export PATH="/root/.deno/bin:$PATH"
REPO_DIR="/home/workspace"

usage() {
  cat <<'EOF'
zo-swamp — Swamp automation CLI for Zo Computer

Commands:
  run <workflow>              Run a workflow
  model-run <model> [method]  Run a model method (default: execute)
  create-model <type> <name>  Scaffold a new model
  validate-model <name>       Validate a model definition
  create-workflow <name>      Scaffold a new workflow
  validate-workflow <name>    Validate a workflow definition
  query <cel-predicate>       Query stored data with CEL
  data-get <model> <name>     Get specific data item
  data-list [model]           List data for model or all
  models [query]              Search/list models
  workflows                   List all workflows
  doctor                      Run swamp doctor (models + workflows)
  vault-create <type> <name>  Create a vault
  vault-put <vault> <key>     Write secret (stdin)
  vault-read <vault> <key>    Read a secret
  vault-list-keys <vault>     List vault keys

Common model types:
  command/shell  http-request  openai-chat  anthropic-chat  ollama-chat  opencode-zen
EOF
  exit "${1:-0}"
}

CMD="${1:-}"
shift || true

case "$CMD" in
  run)
    [[ -z "${1:-}" ]] && { echo "Usage: zo-swamp run <workflow>"; exit 1; }
    swamp workflow run "$1" --repo-dir "$REPO_DIR" "${@:2}"
    ;;
  model-run)
    [[ -z "${1:-}" ]] && { echo "Usage: zo-swamp model-run <model> [method]"; exit 1; }
    model="$1"; method="${2:-execute}"
    swamp model run "$model" "$method" --repo-dir "$REPO_DIR" "${@:3}"
    ;;
  create-model)
    [[ -z "${1:-}" || -z "${2:-}" ]] && { echo "Usage: zo-swamp create-model <type> <name>"; exit 1; }
    swamp model create "$1" "$2" --repo-dir "$REPO_DIR" "${@:3}"
    ;;
  validate-model)
    [[ -z "${1:-}" ]] && { echo "Usage: zo-swamp validate-model <name>"; exit 1; }
    swamp model validate "$1" --repo-dir "$REPO_DIR" "${@:2}"
    ;;
  create-workflow)
    [[ -z "${1:-}" ]] && { echo "Usage: zo-swamp create-workflow <name>"; exit 1; }
    swamp workflow create "$1" --repo-dir "$REPO_DIR" "${@:2}"
    ;;
  validate-workflow)
    [[ -z "${1:-}" ]] && { echo "Usage: zo-swamp validate-workflow <name>"; exit 1; }
    swamp workflow validate "$1" --repo-dir "$REPO_DIR" "${@:2}"
    ;;
  query)
    [[ -z "${1:-}" ]] && { echo "Usage: zo-swamp query <cel-predicate>"; exit 1; }
    swamp data query --predicate "$1" --repo-dir "$REPO_DIR" "${@:2}"
    ;;
  data-get)
    [[ -z "${1:-}" || -z "${2:-}" ]] && { echo "Usage: zo-swamp data-get <model> <name>"; exit 1; }
    swamp data get --model "$1" "$2" --repo-dir "$REPO_DIR" "${@:3}"
    ;;
  data-list)
    if [[ -n "${1:-}" ]]; then
      swamp data list --model "$1" --repo-dir "$REPO_DIR" "${@:2}"
    else
      swamp data list --repo-dir "$REPO_DIR" "${@:2}"
    fi
    ;;
  models)
    swamp model search "${1:-}" --repo-dir "$REPO_DIR" "${@:2}"
    ;;
  workflows)
    swamp workflow list --repo-dir "$REPO_DIR" "${@:2}"
    ;;
  doctor)
    echo "=== Workflows ===" && swamp doctor workflows --repo-dir "$REPO_DIR" "${@:2}"
    echo ""
    echo "=== Model Validation ===" && for m in $(swamp model search --repo-dir "$REPO_DIR" --json 2>/dev/null | jq -r '.results[].name'); do
      echo -n "  $m: " && swamp model validate "$m" --repo-dir "$REPO_DIR" 2>&1 | tail -1 | tr -d '\n' && echo ""
    done
    ;;
  vault-create)
    [[ -z "${1:-}" || -z "${2:-}" ]] && { echo "Usage: zo-swamp vault-create <type> <name>"; exit 1; }
    swamp vault create "$1" "$2" --repo-dir "$REPO_DIR" "${@:3}"
    ;;
  vault-put)
    [[ -z "${1:-}" || -z "${2:-}" ]] && { echo "Usage: zo-swamp vault-put <vault> <key>"; exit 1; }
    swamp vault put "$1" "$2" --repo-dir "$REPO_DIR" "${@:3}"
    ;;
  vault-read)
    [[ -z "${1:-}" || -z "${2:-}" ]] && { echo "Usage: zo-swamp vault-read <vault> <key>"; exit 1; }
    swamp vault read "$1" "$2" --repo-dir "$REPO_DIR" "${@:3}"
    ;;
  vault-list-keys)
    [[ -z "${1:-}" ]] && { echo "Usage: zo-swamp vault-list-keys <vault>"; exit 1; }
    swamp vault list-keys "$1" --repo-dir "$REPO_DIR" "${@:2}"
    ;;
  -h|--help|help|"")
    usage 0
    ;;
  *)
    echo "Unknown command: $CMD"
    usage 1
    ;;
esac
