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

usage() {
  echo "Usage: ai/commands/new-requirements.sh <slug> [draft|active]" >&2
}

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
}

status_for_target() {
  case "$1" in
    drafts) echo "Draft" ;;
    active) echo "Active" ;;
    *) return 1 ;;
  esac
}

next_requirements_id() {
  local requirements_dir="$1"
  local max_id=0
  local file filename id

  shopt -s nullglob
  for file in "$requirements_dir"/{drafts,active,approved,completed}/requirements-[0-9]*-*.md; do
    filename="$(basename "$file")"
    id="${filename#requirements-}"
    id="${id%%-*}"
    if (( 10#$id > max_id )); then
      max_id=$((10#$id))
    fi
  done
  shopt -u nullglob

  printf '%06d\n' "$((max_id + 1))"
}

if [[ $# -lt 1 || $# -gt 2 ]]; then
  usage
  exit 2
fi

slug="$1"
target="${2:-draft}"

if [[ ! "$slug" =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]]; then
  echo "Slug must be kebab-case: $slug" >&2
  exit 1
fi

case "$target" in
  draft) target_dir_name="drafts" ;;
  active) target_dir_name="active" ;;
  *)
    echo "Target must be one of: draft, active" >&2
    exit 1
    ;;
esac

root="$(repo_root)"
requirements_dir="$root/ai/requirements"
target_dir="$requirements_dir/$target_dir_name"

if [[ ! -d "$target_dir" ]]; then
  echo "Requirements target directory does not exist: $target_dir" >&2
  exit 1
fi

requirements_id="$(next_requirements_id "$requirements_dir")"
filename="requirements-${requirements_id}-${slug}.md"
destination="$target_dir/$filename"

if [[ -e "$destination" ]]; then
  echo "Requirements file already exists: $destination" >&2
  exit 1
fi

stdin_file="$(mktemp)"
trap 'rm -f "$stdin_file"' EXIT

if [[ ! -t 0 ]]; then
  cat > "$stdin_file"
fi

created="$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"
status="$(status_for_target "$target_dir_name")"
title="$(printf '%s' "$slug" | sed -E 's/-/ /g; s/\b(.)/\U\1/g')"

{
  cat <<EOF
---
Status: $status
Owner Role: Requirements Intake
Created: $created
Approved:
Depends On:
Validation: ai/commands/requirements-state.sh
---

# $title

## Raw Idea
EOF

  if [[ -s "$stdin_file" ]]; then
    cat "$stdin_file"
  else
    echo
  fi

  cat <<'EOF'

## User Perspective

## User Workflows

## Functional Requirements

## Non-Functional Requirements

## Data / Model Requirements

## Permissions / Auth Requirements

## UI / UX Requirements

## Out Of Scope

## Assumptions

## Open Questions

## Acceptance Criteria

## Runtime Smoke Expectations

## Risks

## Requirements Intake Notes

## Requirements Review

## Chunk Plan

## Pass History
EOF
} > "$destination"

echo "$destination"
