#!/usr/bin/env bash
set -Eeuo pipefail

SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

PID_DIR="${PID_DIR:-run}"
STOP_WAIT="${STOP_WAIT:-10}"

P2_PID_FILE="$PID_DIR/p2.pid"
HASHCAT_PID_FILE="$PID_DIR/p2_hashcat.pid"

is_running_pid() {
    local pid="$1"
    [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null
}

stop_one() {
    local name="$1"
    local pid_file="$2"

    if [[ ! -s "$pid_file" ]]; then
        echo "[$name] 没有 PID 文件：$pid_file"
        return 0
    fi

    local pid
    pid="$(cat "$pid_file")"

    if ! is_running_pid "$pid"; then
        echo "[$name] PID=$pid 未运行，清理 PID 文件。"
        rm -f "$pid_file"
        return 0
    fi

    echo "[$name] 正在停止 PID=$pid ..."
    kill "$pid" 2>/dev/null || true

    local waited=0
    while is_running_pid "$pid" && (( waited < STOP_WAIT )); do
        sleep 1
        waited=$((waited + 1))
    done

    if is_running_pid "$pid"; then
        echo "[$name] $STOP_WAIT 秒内未退出，强制结束 PID=$pid。"
        kill -9 "$pid" 2>/dev/null || true
    fi

    rm -f "$pid_file"
    echo "[$name] 已停止。"
}

# 先停 hashcat 消费端，再停 p2 生成器，避免停止期间继续消费半截状态。
stop_one "p2_hashcat.py" "$HASHCAT_PID_FILE"
stop_one "p2.py" "$P2_PID_FILE"

echo "后台任务关闭完成。"
