#!/bin/bash
# Target level in the Target window (2026-10-04): install the staged DLL and EQUI_TargetWindow.xml into one client
# folder (default: Trevor's desktop client) for testing. Backups: <file>.bak-targetlevel (made once, from whatever is
# there; a missing original is remembered as <file>.bak-targetlevel-absent and removed on revert).
# Run on the desktop:  bash install_desktop.sh [client_dir]     (after copying this folder there)
# Launch with the "(Direct)" launcher: the Patcher launcher puts the shipped (live) DLL back.
# Undo: bash install_desktop.sh --revert [client_dir]. The only complete undo until published: the Patcher launcher
# restores the DLL but leaves EQUI_TargetWindow.xml (not a patcher file yet), which with the live DLL shows
# "Unknown Label900" in the Target window.
set -euo pipefail
here="$(cd "$(dirname "$0")" && pwd)"
revert=0; [ "${1:-}" = "--revert" ] && { revert=1; shift; }
dst="${1:-/home/tj/Desktop/everquest_rof2_tanks}"
[ -f "$dst/eqgame.exe" ] || { echo "no eqgame.exe in $dst" >&2; exit 1; }
if pgrep -i -x eqgame.exe >/dev/null 2>&1; then echo "close the game first" >&2; exit 1; fi
declare -A md5=( [dinput8.dll]=3ab2f0668c845ff20767338786d61795 [EQUI_TargetWindow.xml]=2a47ac19004de7e4e918a621402dd052 )
for f in dinput8.dll uifiles/default/EQUI_TargetWindow.xml; do
    b=$(basename "$f")
    if [ $revert = 1 ]; then
        if [ -f "$dst/$f.bak-targetlevel" ]; then mv -f "$dst/$f.bak-targetlevel" "$dst/$f"; echo "restored $f"
        elif [ -f "$dst/$f.bak-targetlevel-absent" ]; then rm -f "$dst/$f" "$dst/$f.bak-targetlevel-absent"; echo "removed $f (was not there before)"
        else echo "no backup of $f"; fi
        continue
    fi
    want=$(md5sum < "$here/$b" | cut -d" " -f1)
    [ "$want" = "${md5[$b]}" ] || { echo "staged $b md5 $want is not the expected ${md5[$b]} (bad copy?)" >&2; exit 1; }
    if [ ! -f "$dst/$f.bak-targetlevel" ] && [ ! -f "$dst/$f.bak-targetlevel-absent" ]; then
        if [ -f "$dst/$f" ]; then cp -p "$dst/$f" "$dst/$f.bak-targetlevel"; echo "backed up $f"
        else touch "$dst/$f.bak-targetlevel-absent"; fi
    fi
    cp "$here/$b" "$dst/$f.new" && mv -f "$dst/$f.new" "$dst/$f"   # rename: a running client keeps its mapped copy
    echo "installed $f ($want)"
done
[ $revert = 1 ] && exit 0
grep -h "^Exec=" "/home/tj/Desktop/EverQuest RoF2 Tanks (Direct).desktop" 2>/dev/null | grep -q "dinput8=n,b" \
    || echo "WARNING: the (Direct) launcher has no WINEDLLOVERRIDES=dinput8=n,b; wine will use its own dinput8 (run desktop_hjclient.sh install once)"
echo "Log after playing: $dst/hjclient.log (first line ends ...+botinvite+targetlevel) loaded; 'call LabelTextFromEQ @006b4d88 ok')"
