#!/usr/bin/env bash
# Multi-GPU: отдельный dexbtx + screen на каждую карту (CUDA_VISIBLE_DEVICES).
# Single-GPU: делегирует start-btx-screen.sh
set -euo pipefail
export PATH="${HOME}/.local/bin:${PATH}"

INSTALL_DIR="${HOME}/.dexbtx-miner"
[[ -f "${INSTALL_DIR}/solver-platform.env" ]] && source "${INSTALL_DIR}/solver-platform.env"
CONFIG="${INSTALL_DIR}/config.yaml"
MINER="$(command -v dexbtx-miner)"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

worker_name() {
  grep -E '^worker_name:' "$CONFIG" | sed 's/^worker_name:[[:space:]]*//' | tr -d '"'"'"
}

stop_all() {
  screen -wipe >/dev/null 2>&1 || true
  screen -S btx -X quit 2>/dev/null || true
  while read -r sess; do
    [[ -n "$sess" ]] && screen -S "$sess" -X quit 2>/dev/null || true
  done < <(screen -ls 2>/dev/null | awk '/\.btx-g[0-9]+/{print $1}' | cut -d. -f2)
  pgrep -f 'python.*dexbtx-miner' | xargs -r kill -9 2>/dev/null || true
  pgrep -f '[.]local/bin/dexbtx-miner' | xargs -r kill -9 2>/dev/null || true
  pgrep -f '[b]tx-gbt-solve.*--daemon' | xargs -r kill -9 2>/dev/null || true
  sleep 1
}

[[ -f "$CONFIG" ]] || { echo "missing $CONFIG"; exit 1; }

GPUS=$(nvidia-smi -L 2>/dev/null | wc -l)
GPUS=$((GPUS + 0))

if [[ "$GPUS" -le 1 ]]; then
  exec "${INSTALL_DIR}/start-screen.sh"
fi

BASE="$(worker_name)"
[[ -n "$BASE" ]] || { echo "worker_name missing in config"; exit 1; }

sed -i 's/^solver_backend:.*/solver_backend: "cuda"/' "$CONFIG"
sed -i 's/^gpu_inputs:.*/gpu_inputs: 1/' "$CONFIG"

stop_all
mkdir -p "$INSTALL_DIR"

for ((i = 0; i < GPUS; i++)); do
  LOG="${INSTALL_DIR}/miner-g${i}.log"
  PIDFILE="${INSTALL_DIR}/miner-g${i}.pid"
  touch "$LOG"
  setsid env CUDA_VISIBLE_DEVICES="${i}" \
    "${MINER}" --config "${CONFIG}" --worker "${BASE}-g${i}" --gpu-inputs 1 \
    >> "${LOG}" 2>&1 &
  echo $! > "$PIDFILE"
  screen -dmS "btx-g${i}" bash -lc \
    "tail -F ${LOG} | grep --line-buffered -E 'share OK|share reject|rejected|authorized|ERROR|WARN|metrics|hashrate|BLOCK'"
  echo "GPU${i} worker=${BASE}-g${i} screen=btx-g${i} pid=$(cat "$PIDFILE")"
  sleep 2
done

echo "screens: screen -ls | grep btx-g"
