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

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=ai/chunks/lifecycle-lib.sh
source "$script_dir/lifecycle-lib.sh"

chunk_query=""
runtime_args=()

usage() {
  cat <<'EOF'
Usage:
  ai/chunks/validate-transition.sh <chunk-id|path> --to <state> [options]

Options:
  --json
  --recommendation <close|hold|reiterate|unsure|unspecified>
  --approval-created <question-id>
  --operator-hold
  --skip-governance  Test fixture mode only.

Validates a chunk lifecycle transition against
ai/governance/registries/chunk-lifecycle.yaml. The command does not mutate the
chunk file.
EOF
}

if (($# > 0)); then
  chunk_query="$1"
  shift
fi

while (($# > 0)); do
  case "$1" in
    --to) runtime_args+=(--to "${2:?}"); shift 2 ;;
    --json) runtime_args+=(--json); shift ;;
    --recommendation) runtime_args+=(--recommendation "${2:?}"); shift 2 ;;
    --approval-created) runtime_args+=(--approval-created "${2:?}"); shift 2 ;;
    --operator-hold) runtime_args+=(--operator-hold); shift ;;
    --skip-governance) runtime_args+=(--skip-governance); shift ;;
    -h|--help) usage; exit 0 ;;
    *) printf 'validate-transition error: unknown argument: %s\n' "$1" >&2; exit 2 ;;
  esac
done

[[ -n "$chunk_query" ]] || { usage >&2; exit 2; }

chunk_file="$(chunk_lifecycle_find_chunk "$chunk_query")"
repo_root="$(chunk_lifecycle_repo_root)"
cd "$repo_root/ai/runtime"
../../node_modules/.bin/tsc -p tsconfig.json >/dev/null
exec node dist/cli.js validate-transition --chunk "$chunk_file" "${runtime_args[@]}"
