#!/bin/bash
# PM2 Deep Cleanup Script
# AgentWindow Multi-Instance Bug Recovery Tool
#
# This script cleans up:
# - Multiple PM2 God Daemon processes (200+ leaked instances)
# - Orphaned bot processes
# - Stale PM2 dump files
# - Duplicate instances

set -e

echo "🧹 PM2 Deep Cleanup Script"
echo "======================================"
echo ""

# Color codes for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Step 1: Check PM2 processes before cleanup
echo "[1/7] Analyzing current state..."
echo "-----------------------------------"

PM2_COUNT=$(pgrep -f "PM2.*God Daemon" | wc -l | tr -d ' ' || echo "0")
BOT_COUNT=$(ps aux | grep "node.*bot.js" | grep -v grep | wc -l | tr -d ' ' || echo "0")

echo -e "PM2 God Daemons: ${YELLOW}${PM2_COUNT}${NC}"
echo -e "Bot processes: ${YELLOW}${BOT_COUNT}${NC}"
echo ""

if [ "$PM2_COUNT" -lt 5 ] && [ "$BOT_COUNT" -lt 3 ]; then
    echo -e "${GREEN}✓ System appears clean (no major issues detected)${NC}"
    echo ""
    read -p "Continue cleanup anyway? (y/N): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        echo "Cleanup cancelled."
        exit 0
    fi
fi

# Step 2: Stop all PM2 apps
echo "[2/7] Stopping all PM2 apps..."
echo "-----------------------------------"
if command -v pm2 &> /dev/null; then
    pm2 stop all 2>/dev/null || echo "  No apps to stop"
    pm2 delete all 2>/dev/null || echo "  No apps to delete"
    echo -e "${GREEN}✓ PM2 apps stopped${NC}"
else
    echo -e "${YELLOW}⚠ PM2 not found, skipping...${NC}"
fi
echo ""

# Step 3: Kill PM2 daemon
echo "[3/7] Killing PM2 daemon..."
echo "-----------------------------------"
if command -v pm2 &> /dev/null; then
    pm2 kill 2>/dev/null || echo "  Daemon already stopped"
    echo -e "${GREEN}✓ PM2 daemon killed${NC}"
else
    echo -e "${YELLOW}⚠ PM2 not found, skipping...${NC}"
fi
echo ""

# Step 4: Kill remaining PM2 God processes
echo "[4/7] Cleaning up PM2 God processes..."
echo "-----------------------------------"
PM2_PIDS=$(pgrep -f "PM2.*God Daemon" || true)
if [ -n "$PM2_PIDS" ]; then
    echo "$PM2_PIDS" | xargs -I {} kill -9 {} 2>/dev/null || true
    echo -e "${GREEN}✓ Killed PM2 God processes${NC}"
else
    echo -e "${GREEN}✓ No PM2 God processes found${NC}"
fi
echo ""

# Step 5: Remove dump file
echo "[5/7] Removing PM2 dump file..."
echo "-----------------------------------"
DUMP_FILE="$HOME/.pm2/dump.pm2"
if [ -f "$DUMP_FILE" ]; then
    rm -f "$DUMP_FILE"
    echo -e "${GREEN}✓ Removed dump file${NC}"
else
    echo -e "${GREEN}✓ No dump file found${NC}"
fi
echo ""

# Step 6: Kill orphaned bot processes
echo "[6/7] Cleaning up orphaned bot processes..."
echo "-----------------------------------"
BOT_PIDS=$(ps aux | grep "node.*bot.js" | grep -v grep | awk '{print $2}' || true)
if [ -n "$BOT_PIDS" ]; then
    echo "$BOT_PIDS" | xargs -I {} kill -9 {} 2>/dev/null || true
    echo -e "${GREEN}✓ Killed orphaned bot processes${NC}"
else
    echo -e "${GREEN}✓ No orphaned bot processes found${NC}"
fi
echo ""

# Step 7: Verification
echo "[7/7] Verification..."
echo "-----------------------------------"
sleep 1

FINAL_PM2_COUNT=$(pgrep -f "PM2.*God Daemon" | wc -l | tr -d ' ' || echo "0")
FINAL_BOT_COUNT=$(ps aux | grep "node.*bot.js" | grep -v grep | wc -l | tr -d ' ' || echo "0")

echo -e "PM2 God Daemons: ${GREEN}${FINAL_PM2_COUNT}${NC} (was ${PM2_COUNT})"
echo -e "Bot processes: ${GREEN}${FINAL_BOT_COUNT}${NC} (was ${BOT_COUNT})"
echo ""

if [ "$FINAL_PM2_COUNT" -eq 0 ] && [ "$FINAL_BOT_COUNT" -eq 0 ]; then
    echo -e "${GREEN}✅ Cleanup complete! System is clean.${NC}"
    echo ""
    echo "Next steps:"
    echo "  1. Start your bot: pm2 start ecosystem.config.cjs"
    echo "  2. Verify: pm2 list"
    echo "  3. Check logs: pm2 logs --lines 20"
else
    echo -e "${YELLOW}⚠️  Some processes still running. You may need to:${NC}"
    echo "  - Check manually: ps aux | grep bot.js"
    echo "  - Kill manually: kill -9 <PID>"
    echo "  - Restart terminal/daemon"
fi
echo ""
echo "======================================"
