#!/bin/bash
# compare-all.sh — A/B/C test: Qwen vanilla vs Qwen with Claude Style vs Claude Code
#
# 1. Qwen vanilla
# 2. Qwen + Claude Style
# 3. Claude Code (native)
#
# Usage: ./scripts/compare-all.sh

set -e

# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'

PROMPT="Create a Python file 'user_database.py' with a class that manages a user database. Support adding users, finding by email, updating fields, and deleting users. Store in a dict."
OUTPUT_DIR="/tmp/claude-style-compare"
SCRIPT_PATH="$(readlink -f "${BASH_SOURCE[0]}")"
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_PATH")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
WORK_DIR=""
mkdir -p "$OUTPUT_DIR"

cleanup_work_dir() {
    if [ -n "$WORK_DIR" ] && [ -d "$WORK_DIR" ]; then
        rm -rf "$WORK_DIR"
    fi
}
trap cleanup_work_dir EXIT

echo -e "${BLUE}╔══════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║   A/B/C Comparison: Qwen vs Style vs Claude  ║${NC}"
echo -e "${BLUE}╚══════════════════════════════════════════╝${NC}"
echo ""
echo -e "${YELLOW}Prompt:${NC}"
echo "  $PROMPT"
echo ""

# Prerequisite: check for Claude Code
if ! command -v claude &> /dev/null; then
    echo -e "${RED}✗ Claude Code not found — native comparison will be skipped${NC}"
    echo "  Install: npm install -g @anthropic-ai/claude-code"
    echo "  Auth: claude login"
    echo ""
fi

# ============================================================
# 1. Vanilla Qwen
# ============================================================
echo -e "${YELLOW}[1/3] Qwen WITHOUT Claude Style...${NC}"
"$PROJECT_DIR/scripts/uninstall.sh" 2>&1 | grep -E "^(✓|✗|⚠)" || true
WORK_DIR=$(mktemp -d)
pushd "$WORK_DIR" > /dev/null
qwen --prompt "$PROMPT" --output-format text -y 2>&1 | tee "$OUTPUT_DIR/vanilla.txt" > /dev/null 2>&1
if [ -f "$WORK_DIR/user_database.py" ]; then
    cp "$WORK_DIR/user_database.py" "$OUTPUT_DIR/vanilla_code.py"
fi
popd > /dev/null
WORK_DIR=""
echo -e "${GREEN}✓ Done${NC}"
echo ""

# ============================================================
# 2. Qwen + Claude Style
# ============================================================
echo -e "${YELLOW}[2/3] Qwen WITH Claude Style...${NC}"
"$PROJECT_DIR/scripts/setup.sh" 2>&1 | grep -E "^(✓|✗|⚠)" || true
WORK_DIR=$(mktemp -d)
pushd "$WORK_DIR" > /dev/null
qwen --prompt "$PROMPT" --output-format text -y 2>&1 | tee "$OUTPUT_DIR/claude-style.txt" > /dev/null 2>&1
if [ -f "$WORK_DIR/user_database.py" ]; then
    cp "$WORK_DIR/user_database.py" "$OUTPUT_DIR/claude-style_code.py"
fi
popd > /dev/null
WORK_DIR=""
echo -e "${GREEN}✓ Done${NC}"
echo ""

# ============================================================
# 3. Claude Code Native
# ============================================================
echo -e "${YELLOW}[3/3] Claude Code (native)...${NC}"
if command -v claude &> /dev/null; then
    WORK_DIR=$(mktemp -d)
    pushd "$WORK_DIR" > /dev/null
    claude -p "$PROMPT" --dangerously-skip-permissions 2>&1 | tee "$OUTPUT_DIR/claude-native.txt" > /dev/null 2>&1
    if [ -f "$WORK_DIR/user_database.py" ]; then
        cp "$WORK_DIR/user_database.py" "$OUTPUT_DIR/claude-native_code.py"
    fi
    popd > /dev/null
    WORK_DIR=""
    echo -e "${GREEN}✓ Done${NC}"
else
    echo -e "${RED}✗ Skipped — Claude Code not installed${NC}"
    echo '{"error": "Claude Code not installed"}' > "$OUTPUT_DIR/claude-native.txt"
fi
echo ""

# ============================================================
# Comparison
# ============================================================
echo -e "${BLUE}────────────────────────────────────────────${NC}"

for name in vanilla "claude-style" claude-native; do
    echo -e "${YELLOW}─── $name ───${NC}"
    cat "$OUTPUT_DIR/${name}.txt" 2>/dev/null || echo "(no output)"
    echo ""
done

echo -e "${BLUE}─── Metrics ───${NC}"
printf "%-20s %8s %8s %8s\n" "" "lines" "words" "code lines"
printf "%-20s %8s %8s %8s\n" "---" "---" "---" "---"

for name in vanilla "claude-style" claude-native; do
    TXT_LINES=$(wc -l < "$OUTPUT_DIR/${name}.txt" 2>/dev/null || echo "0")
    TXT_WORDS=$(wc -w < "$OUTPUT_DIR/${name}.txt" 2>/dev/null || echo "0")
    CODE_FILE="$OUTPUT_DIR/${name}_code.py"
    if [ -f "$CODE_FILE" ]; then
        CODE_LINES=$(wc -l < "$CODE_FILE")
    else
        CODE_LINES="N/A"
    fi
    printf "%-20s %8s %8s %8s\n" "$name" "$TXT_LINES" "$TXT_WORDS" "$CODE_LINES"
done

echo ""

# Code diff between all three
echo -e "${BLUE}─── Code Comparison ───${NC}"
if [ -f "$OUTPUT_DIR/vanilla_code.py" ] && [ -f "$OUTPUT_DIR/claude-style_code.py" ]; then
    echo ""
    echo "  Vanilla Qwen:      $(wc -l < "$OUTPUT_DIR/vanilla_code.py") lines"
    echo "  Qwen + Claude Style: $(wc -l < "$OUTPUT_DIR/claude-style_code.py") lines"
    if [ -f "$OUTPUT_DIR/claude-native_code.py" ]; then
        echo "  Claude Code native: $(wc -l < "$OUTPUT_DIR/claude-native_code.py") lines"
    fi
    echo ""
    
    VANILLA_COMMENTS=$(grep -c '"""' "$OUTPUT_DIR/vanilla_code.py" || echo "0")
    STYLE_COMMENTS=$(grep -c '"""' "$OUTPUT_DIR/claude-style_code.py" || echo "0")
    
    echo "  Docstrings (triple quotes):"
    echo "  Vanilla Qwen:      $VANILLA_COMMENTS"
    echo "  Qwen + Claude Style: $STYLE_COMMENTS"
    if [ -f "$OUTPUT_DIR/claude-native_code.py" ]; then
        NATIVE_COMMENTS=$(grep -c '"""' "$OUTPUT_DIR/claude-native_code.py" || echo "0")
        echo "  Claude Code native: $NATIVE_COMMENTS"
    fi
    echo ""
    
    echo -e "${BLUE}─── Diff: Vanilla vs Claude Style ───${NC}"
    diff "$OUTPUT_DIR/vanilla_code.py" "$OUTPUT_DIR/claude-style_code.py" 2>/dev/null | head -20 || true
    echo ""
    
    if [ -f "$OUTPUT_DIR/claude-native_code.py" ]; then
        echo -e "${BLUE}─── Diff: Claude Style vs Claude Native ───${NC}"
        diff "$OUTPUT_DIR/claude-style_code.py" "$OUTPUT_DIR/claude-native_code.py" 2>/dev/null | head -20 || true
    fi
fi

echo ""
echo -e "${BLUE}────────────────────────────────────────────${NC}"
