#!/usr/bin/env bash
# Update status flag in revision description
# Usage: jj-flag-update <REV> <TO_FLAG>
# TO_FLAG is: draft, todo, wip, untested, standby, review, blocked, or "done"
# Example: jj-flag-update @ wip
# Example: jj-flag-update mxyz done
#
# Automatically detects the current flag and replaces it.

set -euo pipefail

if [[ $# -ne 2 ]]; then
  echo "Usage: jj-flag-update <REV> <TO_FLAG>" >&2
  echo "Flags: draft, todo, wip, untested, standby, review, blocked, done" >&2
  exit 1
fi

rev="$1"
to_flag="$2"

# Get current description
desc=$(jj log -r "$rev" -n1 --no-graph -T description)

# Detect current flag
current_flag=""
for flag in draft todo wip untested standby review blocked done; do
  if [[ "$desc" =~ ^\[task:${flag}\] ]]; then
    current_flag="$flag"
    break
  fi
done

if [[ -z "$current_flag" ]]; then
  # No current flag - prepend the new one
  echo "[task:${to_flag}] ${desc}" | jj desc -r "$rev" --stdin
  exit 0
fi

# Build sed pattern - replace old flag with new
sed_pattern="s/\[task:${current_flag}\]/[task:${to_flag}]/"

echo "$desc" | sed "$sed_pattern" | jj desc -r "$rev" --stdin
