#!/usr/bin/env bash
# GOTV spectator client: connects to the local dedicated server's GOTV relay and
# renders the auto-directed view. No team/class menus (GOTV viewers skip them).
set -u
BASE=/home/ubuntu/tf2stream
source "$BASE/stream.env"
export DISPLAY=":${DISPLAY_NUM}"
RW="${RENDER_WIDTH:-854}"; RH="${RENDER_HEIGHT:-480}"

# private display + WM (SDL needs a WM for input focus / clean window)
if ! xdpyinfo -display "$DISPLAY" >/dev/null 2>&1; then
  setsid Xvfb "$DISPLAY" -screen 0 "${RW}x${RH}x24" -nolisten tcp >"$BASE/logs/xvfb.log" 2>&1 < /dev/null &
  sleep 2
fi
DISPLAY="$DISPLAY" pgrep -x openbox >/dev/null || { setsid bash -c "export DISPLAY=$DISPLAY; exec openbox" >/dev/null 2>&1 < /dev/null & sleep 2; }

cp -f "$BASE/cfg/client_gotv.cfg" "$BASE/tf2/tf/cfg/autoexec.cfg"

mkdir -p "$BASE/cache/dxvk" "$BASE/cache/mesa"
export LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe MESA_GL_VERSION_OVERRIDE=4.5
export SteamAppId=440 SteamGameId=440 FONTCONFIG_PATH=/etc/fonts
echo 440 > "$BASE/tf2/steam_appid.txt"

cd "$BASE/tf2"
exec "$BASE/sniper/run-in-sniper" -- env \
  DISPLAY="$DISPLAY" SteamAppId=440 SteamGameId=440 FONTCONFIG_PATH=/etc/fonts \
  DXVK_STATE_CACHE=1 DXVK_STATE_CACHE_PATH="$BASE/cache/dxvk" \
  MESA_SHADER_CACHE_DIR="$BASE/cache/mesa" MESA_SHADER_CACHE_MAX_SIZE=2G \
  ./tf.sh -game tf -steam -insecure -console \
  -novid -nostartupsound -nojoy -nosteamcontroller \
  -fullscreen -w "$RW" -h "$RH" +mat_setvideomode "$RW" "$RH" 0 \
  -dxlevel 90 -condebug \
  +exec autoexec \
  +connect 127.0.0.1:27020 \
  >"$BASE/logs/tf2.log" 2>&1
