#!/bin/bash
# ralph-monitor.sh - Dashboard to monitor loop progress
# Generated by ralph-cli for {{projectName}}
# Usage: ./ralph-monitor.sh <feature-name>

FEATURE="${1:?Usage: ./ralph-monitor.sh <feature-name>}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Load config from ralph.config.cjs if available
if [ -f "$SCRIPT_DIR/../ralph.config.cjs" ]; then
    SPEC_DIR=$(node -e "console.log(require('$SCRIPT_DIR/../ralph.config.cjs').paths?.specs || '.ralph/specs')" 2>/dev/null || echo ".ralph/specs")
elif [ -f "$SCRIPT_DIR/../../ralph.config.cjs" ]; then
    SPEC_DIR=$(node -e "console.log(require('$SCRIPT_DIR/../../ralph.config.cjs').paths?.specs || '.ralph/specs')" 2>/dev/null || echo ".ralph/specs")
else
    SPEC_DIR=".ralph/specs"
fi

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

PLAN_FILE="$SPEC_DIR/${FEATURE}-implementation-plan.md"
SPEC_FILE="$SPEC_DIR/${FEATURE}.md"
APP_DIR="$(pwd)"
STATUS_FILE="/tmp/ralph-loop-${FEATURE}.status"
TOKENS_FILE="/tmp/ralph-loop-${FEATURE}.tokens"

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
BOLD='\033[1m'
DIM='\033[2m'
NC='\033[0m'

# Terminal width
TERM_WIDTH=$(tput cols 2>/dev/null || echo 80)

# Truncate text
truncate() {
    local text="$1"
    local max="$2"
    if [ ${#text} -gt $max ]; then
        echo "${text:0:$((max-3))}..."
    else
        echo "$text"
    fi
}

# Clean task text
clean_task() {
    echo "$1" | sed 's/- \[\[complexity:.*\]\]//g' | sed 's/\[complexity:.*\]//g' | sed 's/  */ /g'
}

# Progress bar
progress_bar() {
    local percent=$1
    local width=15
    local filled=$((percent * width / 100))
    local empty=$((width - filled))
    printf "${GREEN}"
    for ((i=0; i<filled; i++)); do printf "\xe2\x96\x88"; done
    printf "${DIM}"
    for ((i=0; i<empty; i++)); do printf "\xe2\x96\x91"; done
    printf "${NC}"
}

# Detect current phase
detect_phase() {
    if pgrep -f "PROMPT_feature.md" > /dev/null 2>&1; then
        echo "Planning"
    elif pgrep -f "PROMPT_e2e.md" > /dev/null 2>&1; then
        echo "E2E Testing"
    elif pgrep -f "PROMPT_review_manual.md" > /dev/null 2>&1; then
        echo "PR Review"
    elif pgrep -f "PROMPT_review_auto.md" > /dev/null 2>&1; then
        echo "PR Review"
    elif pgrep -f "PROMPT.md" > /dev/null 2>&1; then
        echo "Implementation"
    elif pgrep -f "feature-loop.sh.*$FEATURE" > /dev/null 2>&1; then
        echo "Running"
    else
        echo "Idle"
    fi
}

# Get iteration info
get_iteration_info() {
    if [ -f "$STATUS_FILE" ]; then
        cat "$STATUS_FILE"
        return
    fi
    if pgrep -f "feature-loop.sh.*${FEATURE}" > /dev/null 2>&1; then
        echo "-1|50|0"
    else
        echo "0|50|0"
    fi
}

# Get token info
get_token_info() {
    if [ -f "$TOKENS_FILE" ]; then
        cat "$TOKENS_FILE"
    else
        echo "0|0"
    fi
}

# Format number
format_number() {
    local num=$1
    if [ $num -ge 1000000 ]; then
        printf "%.1fM" $(echo "scale=1; $num/1000000" | bc)
    elif [ $num -ge 1000 ]; then
        printf "%.1fK" $(echo "scale=1; $num/1000" | bc)
    else
        printf "%d" $num
    fi
}

# Main loop
while true; do
    clear

    TIMESTAMP=$(date '+%H:%M:%S')
    ITER_INFO=$(get_iteration_info)
    ITER_CURRENT=$(echo "$ITER_INFO" | cut -d'|' -f1)
    ITER_MAX=$(echo "$ITER_INFO" | cut -d'|' -f2)
    [[ "$ITER_CURRENT" =~ ^-?[0-9]+$ ]] || ITER_CURRENT=0
    [[ "$ITER_MAX" =~ ^[0-9]+$ ]] || ITER_MAX=50

    echo -e "${BOLD}================================================================${NC}"
    printf "${BOLD}  ${CYAN}RALPH MONITOR${NC}: %-30s  ${DIM}%s${NC}\n" "$FEATURE" "$TIMESTAMP"
    echo -e "${BOLD}================================================================${NC}"

    # Check if plan exists
    if [ ! -f "$PLAN_FILE" ]; then
        echo ""
        echo -e "  ${YELLOW}Waiting for implementation plan...${NC}"
        echo -e "  ${DIM}$PLAN_FILE${NC}"
        echo ""
        sleep 10
        continue
    fi

    # Count tasks
    DONE_IMPL=$(grep "^- \[x\]" "$PLAN_FILE" 2>/dev/null | grep -v "E2E:" | wc -l | tr -d '[:space:]')
    TODO_IMPL=$(grep "^- \[ \]" "$PLAN_FILE" 2>/dev/null | grep -v "E2E:" | wc -l | tr -d '[:space:]')
    DONE_E2E=$(grep "^- \[x\].*E2E:" "$PLAN_FILE" 2>/dev/null | wc -l | tr -d '[:space:]')
    TODO_E2E=$(grep "^- \[ \].*E2E:" "$PLAN_FILE" 2>/dev/null | wc -l | tr -d '[:space:]')
    [[ "$DONE_IMPL" =~ ^[0-9]+$ ]] || DONE_IMPL=0
    [[ "$TODO_IMPL" =~ ^[0-9]+$ ]] || TODO_IMPL=0
    [[ "$DONE_E2E" =~ ^[0-9]+$ ]] || DONE_E2E=0
    [[ "$TODO_E2E" =~ ^[0-9]+$ ]] || TODO_E2E=0

    TOTAL_IMPL=$((DONE_IMPL + TODO_IMPL))
    TOTAL_E2E=$((DONE_E2E + TODO_E2E))
    DONE_ALL=$((DONE_IMPL + DONE_E2E))
    TOTAL_ALL=$((TOTAL_IMPL + TOTAL_E2E))

    [ $TOTAL_IMPL -gt 0 ] && PERCENT_IMPL=$((DONE_IMPL * 100 / TOTAL_IMPL)) || PERCENT_IMPL=0
    [ $TOTAL_ALL -gt 0 ] && PERCENT_ALL=$((DONE_ALL * 100 / TOTAL_ALL)) || PERCENT_ALL=0

    PHASE=$(detect_phase)
    BRANCH=$(git branch --show-current 2>/dev/null || echo "-")

    case "$PHASE" in
        "Planning") PHASE_COLOR="${BLUE}" ;;
        "Implementation") PHASE_COLOR="${YELLOW}" ;;
        "E2E Testing") PHASE_COLOR="${CYAN}" ;;
        "Verification") PHASE_COLOR="${MAGENTA}" ;;
        "PR Review") PHASE_COLOR="${GREEN}" ;;
        "Idle") PHASE_COLOR="${DIM}" ;;
        *) PHASE_COLOR="${NC}" ;;
    esac

    TOKEN_INFO=$(get_token_info)
    TOKEN_INPUT=$(echo "$TOKEN_INFO" | cut -d'|' -f1)
    TOKEN_OUTPUT=$(echo "$TOKEN_INFO" | cut -d'|' -f2)
    [[ "$TOKEN_INPUT" =~ ^[0-9]+$ ]] || TOKEN_INPUT=0
    [[ "$TOKEN_OUTPUT" =~ ^[0-9]+$ ]] || TOKEN_OUTPUT=0
    TOKEN_TOTAL=$((TOKEN_INPUT + TOKEN_OUTPUT))

    if [ "$ITER_CURRENT" = "-1" ]; then
        ITER_DISPLAY="?"
    else
        ITER_DISPLAY="$ITER_CURRENT"
    fi

    # Status
    echo ""
    printf "  Phase: ${PHASE_COLOR}${BOLD}%-14s${NC}" "$PHASE"
    printf "  Iter: ${BOLD}%s${NC}/${DIM}%d${NC}" "$ITER_DISPLAY" "$ITER_MAX"
    printf "  Branch: ${CYAN}%s${NC}\n" "$BRANCH"
    printf "  Tokens: ${MAGENTA}$(format_number $TOKEN_TOTAL)${NC} ${DIM}(in:$(format_number $TOKEN_INPUT) out:$(format_number $TOKEN_OUTPUT))${NC}\n"

    echo -e "${DIM}  ----------------------------------------------------------------${NC}"

    # Progress
    echo ""
    printf "  ${BOLD}Implementation:${NC} $(progress_bar $PERCENT_IMPL) ${BOLD}%3d%%${NC}  " "$PERCENT_IMPL"
    printf "${GREEN}Done: %d${NC} / ${YELLOW}Todo: %d${NC}\n" "$DONE_IMPL" "$TODO_IMPL"

    if [ $TOTAL_E2E -gt 0 ]; then
        [ $TOTAL_E2E -gt 0 ] && PERCENT_E2E=$((DONE_E2E * 100 / TOTAL_E2E)) || PERCENT_E2E=0
        printf "  ${BOLD}E2E Tests:     ${NC} $(progress_bar $PERCENT_E2E) ${BOLD}%3d%%${NC}  " "$PERCENT_E2E"
        printf "${GREEN}Done: %d${NC} / ${YELLOW}Todo: %d${NC}\n" "$DONE_E2E" "$TODO_E2E"
    fi

    printf "  ${DIM}--------------------------------------------${NC}\n"
    printf "  ${BOLD}Overall:       ${NC} $(progress_bar $PERCENT_ALL) ${BOLD}%3d%%${NC}  " "$PERCENT_ALL"
    printf "${GREEN}Done: %d${NC} / Total: %d\n" "$DONE_ALL" "$TOTAL_ALL"

    # Current task
    CURRENT_TASK=$(grep "^- \[ \]" "$PLAN_FILE" 2>/dev/null | grep -v "E2E:" | head -1 | sed 's/^- \[ \] //')
    CURRENT_TASK=$(clean_task "$CURRENT_TASK")
    if [ -n "$CURRENT_TASK" ]; then
        echo ""
        echo -e "  ${BOLD}NOW WORKING ON${NC}"
        CURRENT_TASK=$(truncate "$CURRENT_TASK" $((TERM_WIDTH - 8)))
        echo -e "  ${YELLOW}>${NC} ${BOLD}$CURRENT_TASK${NC}"
    fi

    # Recent commits
    echo ""
    echo -e "  ${BOLD}RECENT COMMITS${NC}"
    COMMITS=$(git log --oneline -3 2>/dev/null)
    if [ -n "$COMMITS" ]; then
        while IFS= read -r commit; do
            commit=$(truncate "$commit" $((TERM_WIDTH - 8)))
            echo -e "  ${DIM}$commit${NC}"
        done <<< "$COMMITS"
    else
        echo -e "  ${DIM}No commits yet${NC}"
    fi

    echo ""
    echo -e "${DIM}  ----------------------------------------------------------------${NC}"
    echo -e "  ${DIM}Refreshing every 10s - Press Ctrl+C to exit${NC}"

    sleep 10
done
