#!/bin/bash
# Close TalkEdit and/or CutScript processes (Tauri dev, Electron, and Python backends)

KILLED_ANY=0

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 backend (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, port 8000) ---
kill_port 8000 "TalkEdit"
kill_pattern "tauri.*TalkEdit\|TalkEdit.*tauri\|cargo.*tauri dev\|/TalkEdit/target/debug" "TalkEdit (Tauri dev)"
# Vite dev server for TalkEdit (port 5173)
kill_pattern "vite.*5173\|rsbuild.*5173" "TalkEdit frontend dev server"

# --- CutScript (Electron, port 8642) ---
kill_port 8642 "CutScript"
kill_pattern "electron.*CutScript\|CutScript.*electron" "CutScript (Electron)"
kill_pattern "vite.*CutScript\|CutScript.*vite" "CutScript frontend dev server"

# --- Orphaned uvicorn workers for either app ---
kill_pattern "uvicorn.*main:app.*--port 800[012]" "leftover uvicorn workers (TalkEdit)"
kill_pattern "uvicorn.*main:app.*--port 864" "leftover uvicorn workers (CutScript)"

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