#!/bin/bash

# ============================================================================
# FARMMATCH PROCESS CLEANUP UTILITY
# ============================================================================
# Safely kills all Paradisomatch-related background processes
# Use this when processes are stuck or you want a clean slate
#
# Usage: ./cleanup_processes.sh
# ============================================================================

set -e

# Color codes
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

echo -e "${CYAN}============================================================================${NC}"
echo -e "${CYAN}🧹 FARMMATCH PROCESS CLEANUP${NC}"
echo -e "${CYAN}============================================================================${NC}"
echo ""

# List of process names to clean up
PROCESS_NAMES=(
    "favorites_scraper.py"
    "extract_breadcrumbs.py"
    "fix_missing_breadcrumbs.py"
    "extract_gps_and_kpis.py"
    "geocode_with_breadcrumbs.py"
    "geocode_properties.py"
    "bulletproof_geocoding.py"
    "analyze_from_urls_optimized.py"
    "analyze_from_urls.py"
    "parse_criteria.py"
    "check_availability.py"
)

KILLED_COUNT=0
TOTAL_FOUND=0

echo -e "${BLUE}🔍 Searching for Paradisomatch processes...${NC}"
echo ""

for PROCESS in "${PROCESS_NAMES[@]}"; do
    # Find PIDs for this process
    PIDS=$(ps aux | grep "$PROCESS" | grep -v grep | awk '{print $2}' || true)

    if [ -n "$PIDS" ]; then
        echo -e "${YELLOW}Found: $PROCESS${NC}"
        for PID in $PIDS; do
            TOTAL_FOUND=$((TOTAL_FOUND + 1))
            echo -e "  PID: $PID"

            # Try graceful kill first (SIGTERM)
            if kill -15 "$PID" 2>/dev/null; then
                sleep 1

                # Check if still running
                if ps -p "$PID" > /dev/null 2>&1; then
                    # Force kill (SIGKILL)
                    echo -e "  ${YELLOW}  Process didn't stop gracefully, force killing...${NC}"
                    kill -9 "$PID" 2>/dev/null || true
                fi

                KILLED_COUNT=$((KILLED_COUNT + 1))
                echo -e "  ${GREEN}✅ Killed${NC}"
            else
                echo -e "  ${RED}❌ Failed to kill (may have already stopped)${NC}"
            fi
        done
    fi
done

echo ""
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"

if [ $TOTAL_FOUND -eq 0 ]; then
    echo -e "${GREEN}✅ No Paradisomatch processes found - system is clean${NC}"
else
    echo -e "${GREEN}✅ Cleanup complete${NC}"
    echo -e "${CYAN}   Found: $TOTAL_FOUND processes${NC}"
    echo -e "${CYAN}   Killed: $KILLED_COUNT processes${NC}"
fi

echo ""
echo -e "${CYAN}============================================================================${NC}"
