#!/bin/bash
# Close TalkEdit processes (Tauri dev and Python backend)

KILLED_ANY=0
BACKEND_PORT="${BACKEND_PORT:-8000}"
FRONTEND_PORT="${FRONTEND_PORT:-5173}"

kill_port() {
    local port=$1
    local name=$2
    local pids
    pids=$(lsof -ti tcp:"$port" 2>/dev/null)
    if [[ -n "$pids" ]]; then
        echo "Stopping $name (port $port, PID $pids)..."
        kill "$pids" 2>/dev/null
        KILLED_ANY=1
    fi
}

kill_pattern() {
    local pattern=$1
    local label=$2
    local pids
    pids=$(pgrep -f "$pattern" 2>/dev/null)
    if [[ -n "$pids" ]]; then
        echo "Stopping $label..."
        kill $pids 2>/dev/null
        KILLED_ANY=1
    fi
}

# --- TalkEdit (Tauri) ---
kill_port "$BACKEND_PORT" "TalkEdit"
kill_pattern "tauri.*TalkEdit\|TalkEdit.*tauri\|cargo.*tauri dev\|/TalkEdit/target/debug" "TalkEdit (Tauri dev)"
# Frontend dev server: first kill by listening port, then by known process patterns.
kill_port "$FRONTEND_PORT" "TalkEdit frontend"
kill_pattern "vite\|rsbuild\|npm.*run dev\|pnpm.*dev\|yarn.*dev" "TalkEdit frontend dev server"

# --- Orphaned uvicorn workers for TalkEdit ---
kill_pattern "uvicorn.*main:app.*--port ${BACKEND_PORT}" "leftover uvicorn workers (TalkEdit)"

if [[ $KILLED_ANY -eq 0 ]]; then
    echo "Nothing to close — no TalkEdit processes found."
else
    echo "Done."
fi
