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

cd "$(dirname "$0")"

CAMERAS="${CAMERAS:-/dev/video0,/dev/video2,/dev/video4}"
WIDTH="${WIDTH:-1280}"
HEIGHT="${HEIGHT:-1024}"
FPS="${FPS:-15}"
CLEAR_CACHE_ON_START="${CLEAR_CACHE_ON_START:-1}"
PID_FILE="run/opendartboard.pid"
LOG_FILE="run/opendartboard.log"

mkdir -p run

IFS=, read -r -a camera_list <<< "$CAMERAS"

if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
  echo "OpenDartboard is already running with PID $(cat "$PID_FILE")"
  exit 0
fi

rm -f "$PID_FILE"
pkill -f "$PWD/build/opendartboard" 2>/dev/null || true
pkill -f './build/opendartboard' 2>/dev/null || true

if command -v fuser >/dev/null 2>&1; then
  for _ in {1..20}; do
    busy=0
    for camera in "${camera_list[@]}"; do
      if [[ -e "$camera" ]] && fuser "$camera" >/dev/null 2>&1; then
        busy=1
      fi
    done
    [[ "$busy" -eq 0 ]] && break
    sleep 0.25
  done
else
  sleep 1
fi

if [[ "$CLEAR_CACHE_ON_START" == "1" ]]; then
  rm -rf cache debug_frames
  mkdir -p debug_frames
fi

for camera in "${camera_list[@]}"; do
  if [[ -e "$camera" ]] && command -v v4l2-ctl >/dev/null 2>&1; then
    v4l2-ctl -d "$camera" --set-fmt-video="width=${WIDTH},height=${HEIGHT},pixelformat=MJPG" --set-parm="$FPS" >/dev/null 2>&1 || true
  fi
done

nohup ./build/opendartboard \
  --debug \
  --cams "$CAMERAS" \
  --width "$WIDTH" \
  --height "$HEIGHT" \
  --fps "$FPS" \
  > "$LOG_FILE" 2>&1 &

echo "$!" > "$PID_FILE"
echo "OpenDartboard started with PID $(cat "$PID_FILE")"
echo "Log: $PWD/$LOG_FILE"
