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

usage() {
  cat <<'EOF'
Usage:
  manage-queue.sh list [--json]
  manage-queue.sh delete <queue-id>
  manage-queue.sh hold <queue-id>
  manage-queue.sh release <queue-id>
  manage-queue.sh requeue <queue-id>
EOF
}

require_root() {
  if [[ $EUID -ne 0 ]]; then
    echo "Run as root." >&2
    exit 1
  fi
}

validate_queue_id() {
  [[ "$1" =~ ^[A-Za-z0-9]{1,64}$ ]] || {
    echo "Invalid queue ID." >&2
    exit 1
  }
}

list_queue() {
  if [[ ${1:-} == "--json" ]]; then
    postqueue -j | python3 -c 'import json, sys; print(json.dumps([json.loads(line) for line in sys.stdin if line.strip()]))'
    return 0
  fi
  postqueue -p
}

require_root

command=${1:-}
case "$command" in
  list)
    shift
    list_queue "${1:-}"
    ;;
  delete)
    validate_queue_id "${2:?queue id required}"
    postsuper -d "${2:?queue id required}"
    ;;
  hold)
    validate_queue_id "${2:?queue id required}"
    postsuper -h "${2:?queue id required}"
    ;;
  release)
    validate_queue_id "${2:?queue id required}"
    postsuper -H "${2:?queue id required}"
    ;;
  requeue)
    validate_queue_id "${2:?queue id required}"
    postsuper -r "${2:?queue id required}"
    ;;
  *)
    usage >&2
    exit 1
    ;;
esac
