#!/bin/bash
# loop.sh - Simple Ralph iteration loop
# Generated by ralph-cli for {{projectName}}
# Usage: ./loop.sh [prompt-file] [max-iterations]

set -e

# Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load config from ralph.config.cjs if available
if [ -f "$SCRIPT_DIR/../ralph.config.cjs" ]; then
    PROMPTS_DIR=$(node -e "console.log(require('$SCRIPT_DIR/../ralph.config.cjs').paths?.prompts || '.ralph/prompts')" 2>/dev/null || echo ".ralph/prompts")
    DEFAULT_MODEL=$(node -e "console.log(require('$SCRIPT_DIR/../ralph.config.cjs').loop?.defaultModel || 'sonnet')" 2>/dev/null || echo "sonnet")
    CLAUDE_PERMISSION_MODE=$(node -e "console.log(require('$SCRIPT_DIR/../ralph.config.cjs').loop?.claudePermissionMode || 'default')" 2>/dev/null || echo "default")
elif [ -f "$SCRIPT_DIR/../../ralph.config.cjs" ]; then
    PROMPTS_DIR=$(node -e "console.log(require('$SCRIPT_DIR/../../ralph.config.cjs').paths?.prompts || '.ralph/prompts')" 2>/dev/null || echo ".ralph/prompts")
    DEFAULT_MODEL=$(node -e "console.log(require('$SCRIPT_DIR/../../ralph.config.cjs').loop?.defaultModel || 'sonnet')" 2>/dev/null || echo "sonnet")
    CLAUDE_PERMISSION_MODE=$(node -e "console.log(require('$SCRIPT_DIR/../../ralph.config.cjs').loop?.claudePermissionMode || 'default')" 2>/dev/null || echo "default")
else
    PROMPTS_DIR=".ralph/prompts"
    DEFAULT_MODEL="sonnet"
    CLAUDE_PERMISSION_MODE="default"
fi

# Navigate to project root
cd "$SCRIPT_DIR/../.."

PROMPT_FILE="${1:-$PROMPTS_DIR/PROMPT.md}"
MAX_ITERATIONS="${2:-0}"
MODEL="${3:-$DEFAULT_MODEL}"
ITERATION=0

echo "Starting Ralph loop"
echo "  Prompt: $PROMPT_FILE"
echo "  Model: $MODEL"
echo "  Claude permission mode: $CLAUDE_PERMISSION_MODE"
echo "  Max iterations: $MAX_ITERATIONS (0 = infinite)"
echo "Press Ctrl+C to stop"
echo ""

# Check if prompt file exists
if [ ! -f "$PROMPT_FILE" ]; then
    echo "ERROR: Prompt file not found: $PROMPT_FILE"
    exit 1
fi

while true; do
    if [ $MAX_ITERATIONS -gt 0 ] && [ $ITERATION -ge $MAX_ITERATIONS ]; then
        echo "Reached max iterations: $MAX_ITERATIONS"
        break
    fi

    ITERATION=$((ITERATION + 1))
    echo "======================== ITERATION $ITERATION ========================"

    cat "$PROMPT_FILE" | claude -p --permission-mode "$CLAUDE_PERMISSION_MODE" --model "$MODEL"

    echo ""
    sleep 2
done

echo "Loop completed after $ITERATION iterations"
