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

if [[ $# -ne 1 ]]; then
  echo "Usage: ai/commands/complete-requirements.sh <path-to-requirements-file>" >&2
  exit 2
fi

repo_root() {
  local script_dir
  script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  if git -C "$script_dir" rev-parse --show-toplevel >/dev/null 2>&1; then
    git -C "$script_dir" rev-parse --show-toplevel
    return
  fi
  cd "$script_dir/../.." && pwd
}

absolute_path() {
  local input_path="$1"
  local root="$2"
  case "$input_path" in
    /*) echo "$input_path" ;;
    *) echo "$root/$input_path" ;;
  esac
}

root="$(repo_root)"
requirements_root="$root/ai/requirements"
input_path="$1"
requirements_path="$(absolute_path "$input_path" "$root")"

if [[ ! -f "$requirements_path" ]]; then
  echo "Requirements file does not exist: $input_path" >&2
  exit 1
fi

requirements_dir="$(cd "$(dirname "$requirements_path")" && pwd)"
completed_dir="$requirements_root/completed"

case "$requirements_dir" in
  "$requirements_root/drafts" | "$requirements_root/active" | "$requirements_root/approved")
    ;;
  *)
    echo "Requirements file must be inside ai/requirements/drafts, active, or approved: $input_path" >&2
    exit 1
    ;;
esac

filename="$(basename "$requirements_path")"
if [[ ! "$filename" =~ ^requirements-[0-9]+-.*\.md$ ]]; then
  echo "Requirements filename is invalid: $filename" >&2
  exit 1
fi

destination="$completed_dir/$filename"
if [[ -e "$destination" ]]; then
  echo "Completed requirements file already exists: $destination" >&2
  exit 1
fi

tmp_file="$(mktemp)"
requirements_mode="$(stat -c '%a' "$requirements_path" 2>/dev/null || stat -f '%Lp' "$requirements_path")"

awk '
  BEGIN { in_meta = 0; seen_status = 0 }
  NR == 1 && $0 == "---" { in_meta = 1; print; next }
  in_meta && $0 == "---" {
    if (!seen_status) print "Status: Completed"
    in_meta = 0
    print
    next
  }
  in_meta && $0 ~ /^Status:/ {
    print "Status: Completed"
    seen_status = 1
    next
  }
  { print }
' "$requirements_path" > "$tmp_file"

chmod "$requirements_mode" "$tmp_file"
mv "$tmp_file" "$requirements_path"
mv "$requirements_path" "$destination"

echo "$destination"
