#!/bin/bash
# Parallel autofix orchestrator
# Usage: tools/autofix/run.sh ISS-0026 ISS-0028 ISS-0035
#
# For each issue:
#   1. Create git worktree at .worktree/ISS-NNNN
#   2. Launch Claude Code session in background
#   3. Wait for all sessions to complete
#   4. Clean up worktrees

set -euo pipefail

REPO_ROOT="$(git rev-parse --show-toplevel)"
WORKTREE_DIR="${REPO_ROOT}/.worktree"
PIDS=()
ISSUES=("$@")

if [ ${#ISSUES[@]} -eq 0 ]; then
  echo "Usage: $0 ISS-NNNN [ISS-MMMM ...]"
  exit 1
fi

mkdir -p "${WORKTREE_DIR}"

for ISSUE_ID in "${ISSUES[@]}"; do
  BRANCH="fix/${ISSUE_ID}"
  WT_PATH="${WORKTREE_DIR}/${ISSUE_ID}"

  # Clean up stale worktree if exists
  if [ -d "${WT_PATH}" ]; then
    git worktree remove "${WT_PATH}" --force 2>/dev/null || true
  fi

  # Create worktree with new branch from main
  git worktree add "${WT_PATH}" -b "${BRANCH}" origin/main

  # Copy github token to worktree
  cp "${REPO_ROOT}/tools/replayer/.github_token" "${WT_PATH}/tools/replayer/.github_token" 2>/dev/null || true

  echo "[${ISSUE_ID}] Worktree created at ${WT_PATH}"
  echo "[${ISSUE_ID}] Launching Claude Code session..."

  # Launch session in background
  (
    cd "${WT_PATH}"
    claude -p "Fix ${ISSUE_ID} per tools/replayer/issues/issues.yaml and tools/autofix/SKILL.md" \
      2>&1 | tee "${WORKTREE_DIR}/${ISSUE_ID}.log"
  ) &
  PIDS+=($!)
done

echo ""
echo "Launched ${#PIDS[@]} sessions. Waiting for completion..."
echo ""

# Wait for all sessions
FAILED=0
for i in "${!PIDS[@]}"; do
  ISSUE_ID="${ISSUES[$i]}"
  PID="${PIDS[$i]}"
  if wait "${PID}"; then
    echo "[${ISSUE_ID}] Completed successfully"
  else
    echo "[${ISSUE_ID}] FAILED (exit code $?)"
    FAILED=$((FAILED + 1))
  fi
done

# Clean up worktrees
echo ""
echo "Cleaning up worktrees..."
for ISSUE_ID in "${ISSUES[@]}"; do
  WT_PATH="${WORKTREE_DIR}/${ISSUE_ID}"
  git worktree remove "${WT_PATH}" --force 2>/dev/null || true
done

echo ""
echo "Done. ${#ISSUES[@]} issues processed, ${FAILED} failed."
echo "Logs: ${WORKTREE_DIR}/*.log"
