#!/bin/bash
set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
REGISTRY="$ROOT_DIR/.smbatcher/REGISTRY.md"

if [[ ! -f "$REGISTRY" ]]; then
  echo "ERROR: Registry not found: $REGISTRY"
  exit 2
fi

# Create a temporary file to store processed registry data
# Format: batch|status|domain|title
TEMP_DATA=$(mktemp /tmp/wdstatus.XXXXXX)
trap 'rm -f "$TEMP_DATA"' EXIT

# Parse registry (excluding Q - finished)
while IFS='|' read -r _ domain title desc status batch updated _; do
  # Trim whitespace
  domain=$(echo "$domain" | xargs 2>/dev/null || echo "$domain" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
  title=$(echo "$title" | xargs 2>/dev/null || echo "$title" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
  status=$(echo "$status" | xargs 2>/dev/null || echo "$status" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
  batch=$(echo "$batch" | xargs 2>/dev/null || echo "$batch" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')

  # Skip header row, separator, and empty lines
  [[ -z "$domain" || "$domain" == "Domain" || "$domain" == "---"* || "$domain" == "-"* ]] && continue

  # Skip Q (Finished) status
  [[ "$status" == "Q" ]] && continue

  echo "${batch}|${status}|${domain}|${title}" >> "$TEMP_DATA"
done < "$REGISTRY"

# Sort and output by batch, then by status
echo "# Site Status Report"
echo ""
echo "Generated: $(date -Iseconds 2>/dev/null || date +%Y-%m-%dT%H:%M:%S)"
echo ""

if [[ ! -s "$TEMP_DATA" ]]; then
  echo "No active sites found."
  echo ""
  echo "---"
  echo "Total active sites: 0"
  exit 0
fi

# Get unique batches sorted
batches=$(cut -d'|' -f1 "$TEMP_DATA" | sort -u)

for batch in $batches; do
  batch_count=$(grep "^${batch}|" "$TEMP_DATA" | wc -l | xargs)
  echo "## Batch $batch ($batch_count sites)"
  echo ""

  # Status order: - B d D O i I (Q excluded)
  for status in "-" "B" "d" "D" "O" "i" "I"; do
    # Filter sites for this batch and status
    sites_data=$(grep "^${batch}|${status}|" "$TEMP_DATA" || true)
    
    if [[ -n "$sites_data" ]]; then
      case "$status" in
        "-") status_name="Not Started" ;;
        "B") status_name="Design Backlog" ;;
        "d") status_name="Designing" ;;
        "D") status_name="Design Done" ;;
        "O") status_name="Implement Backlog" ;;
        "i") status_name="Implementing" ;;
        "I") status_name="Implement Done" ;;
        *) status_name="Unknown" ;;
      esac
      
      status_count=$(echo "$sites_data" | wc -l | xargs)
      echo "### $status ($status_name) [$status_count]"
      echo "$sites_data" | while IFS='|' read -r _b _s dom tit; do
        if [[ -n "$dom" ]]; then
          if [[ -n "$tit" && "$tit" != "$dom" ]]; then
            echo "  - $dom ($tit)"
          else
            echo "  - $dom"
          fi
        fi
      done
      echo ""
    fi
  done
done

# Summary
total=$(wc -l < "$TEMP_DATA" | xargs)

echo "---"
echo "Total active sites: $total"
