#!/bin/bash
# 交互式保留录制脚本

# 1. 收集当前正在录制的 ffmpeg 进程 (pid + name)
mapfile -t lines < <(ps -ef | grep ffmpeg | grep -v grep | grep -v overlay)

if [ ${#lines[@]} -eq 0 ]; then
    echo "当前没有正在录制的主播"
    exit 0
fi

declare -a pids
declare -a names

idx=1
echo "当前正在录制的主播："
for line in "${lines[@]}"; do
    pid=$(echo "$line" | awk '{print $2}')
    name=$(echo "$line" | grep -oE "/([0-9]{4})/(\w*?)" | sed 's/\/[0-9]*\/\(\w*\)/\1/g')

    if [ -z "$name" ]; then
        continue
    fi

    pids[$idx]="$pid"
    names[$idx]="$name"
    echo "$idx: $name"
    idx=$((idx + 1))
done

total=$((idx - 1))

if [ "$total" -eq 0 ]; then
    echo "没有解析到有效的主播名"
    exit 0
fi

# 2. 循环提示输入编号，输入 0 结束
declare -A keep_set

while true; do
    read -rp "请输入要保留的编号 (输入 0 结束): " num

    if [ "$num" == "0" ]; then
        break
    fi

    if ! [[ "$num" =~ ^[0-9]+$ ]] || [ "$num" -lt 1 ] || [ "$num" -gt "$total" ]; then
        echo "无效编号，请输入 1-$total 之间的数字，或 0 结束"
        continue
    fi

    keep_set[$num]=1
    echo "已保留: ${names[$num]}"
done

if [ ${#keep_set[@]} -eq 0 ]; then
    echo "未选择任何要保留的主播，将停止所有录制"
    read -rp "确认吗? (y/n): " confirm
    if [ "$confirm" != "y" ]; then
        echo "已取消"
        exit 0
    fi
fi

# 3. 停止未被选中的主播的录制
echo ""
echo "===== 处理结果 ====="
for i in $(seq 1 "$total"); do
    if [ -n "${keep_set[$i]}" ]; then
        echo "保留: ${names[$i]} (PID ${pids[$i]})"
    else
        echo "停止: ${names[$i]} (PID ${pids[$i]})"
        kill -2 "${pids[$i]}"
    fi
done
