@echo off
setlocal EnableExtensions EnableDelayedExpansion

:: ------------ CONFIG ------------
:: Space-separated substrings (case-insensitive)
set PROCESSES=vvvv TeamViewer
:: seconds between checks
set INTERVAL=10
:: consecutive failed checks before reboot (1 = immediate)
set MISSES=1
:: --------------------------------

echo Watcher starting
echo  PROCESSES : %PROCESSES%
echo  INTERVAL  : %INTERVAL%s
echo  MISSES    : %MISSES%
echo.

set missStreak=0

:LOOP
set anyMissing=0

for %%P in (%PROCESSES%) do call :CheckOne "%%~P"

if "!anyMissing!"=="1" (
  set /a missStreak+=1
  1>&2 echo [STATUS] One or more required processes are missing. Failure !missStreak!/%MISSES%
  if !missStreak! GEQ %MISSES% (
    1>&2 echo [ACTION] Rebooting now (shutdown -f -r -t 0)
    shutdown.exe -f -r -t 0
    rem if shutdown somehow fails, fall through and keep looping
    set missStreak=0
  )
) else (
  set missStreak=0
  echo [STATUS] All required processes present at %date% %time%
)

call :Sleep %INTERVAL%
goto LOOP

:: -------- subroutines --------

:CheckOne
set "P=%~1"
tasklist /NH /FO CSV | findstr /I /C:"%P%" >nul
if errorlevel 1 (
  1>&2 echo [MISS] No running process containing "%P%"
  set anyMissing=1
) else (
  echo [OK] Found process containing "%P%"
)
exit /b

:Sleep
set /a __wait=%~1+1
ping 127.0.0.1 -n %__wait% >nul
exit /b
