@echo off
setlocal ENABLEDELAYEDEXPANSION

set HCT_DIR=%~dp0

if "%BUILD_CONFIG%"=="" (
  set BUILD_CONFIG=Debug
)

:opt_loop
if "%1"=="" (goto :done_opt)

if "%1"=="/?" goto :showhelp
if "%1"=="-?" goto :showhelp
if "%1"=="-h" goto :showhelp
if "%1"=="-help" goto :showhelp
if "%1"=="--help" goto :showhelp

if "%1"=="-rel" (
  set BUILD_CONFIG=Release
) else (
  goto :done_opt
)
shift /1
goto :opt_loop
:done_opt

if "%HLSL_TAEF_DIR%"=="" (
  echo No HLSL_TAEF_DIR is set, no TAEF components will be copied.
)

set FULL_AGILITY_PATH=
if "%HLSL_AGILITYSDK_DIR%"=="" (
  echo No HLSL_AGILITYSDK_DIR is set, no AgilitySDK binaries will be copied.
) else (
  if exist "%HLSL_AGILITYSDK_DIR%\build\native\bin\%BUILD_ARCH:Win32=x86%\D3D12Core.dll" (
    set FULL_AGILITY_PATH=%HLSL_AGILITYSDK_DIR%\build\native\bin\%BUILD_ARCH:Win32=x86%
  ) else if exist "%HLSL_AGILITYSDK_DIR%\%BUILD_ARCH:Win32=x86%\D3D12Core.dll" (
    set FULL_AGILITY_PATH=%HLSL_AGILITYSDK_DIR%\%BUILD_ARCH:Win32=x86%
  ) else if exist "%HLSL_AGILITYSDK_DIR%\D3D12Core.dll" (
    set FULL_AGILITY_PATH=%HLSL_AGILITYSDK_DIR%
  ) else (
    echo HLSL_AGILITYSDK_DIR is set, but unable to resolve path to binaries
  )
)

if exist "%HLSL_BLD_DIR%\%BUILD_CONFIG%\bin" (
  call :copytobin "%HLSL_BLD_DIR%\%BUILD_CONFIG%\bin"
)
if exist "%HLSL_BLD_DIR%\%BUILD_CONFIG%\test" (
  call :copytobin "%HLSL_BLD_DIR%\%BUILD_CONFIG%\test"
)
goto :eof


:copytobin
if not "%HLSL_TAEF_DIR%"=="" (
  call %HCT_DIR%\hctcopy.cmd "%HLSL_TAEF_DIR%\%BUILD_ARCH:Win32=x86%" "%~1" TE.Common.dll Wex.Common.dll Wex.Communication.dll Wex.Logger.dll
)
if not "%FULL_AGILITY_PATH%"=="" (
  mkdir "%~1\D3D12" 1>nul 2>nul
  call %HCT_DIR%\hctcopy.cmd "%FULL_AGILITY_PATH%" "%~1\D3D12" D3D12Core.dll d3d12SDKLayers.dll
)
goto :eof

:showhelp 
echo Usage:
echo   hctbins [-rel]
echo.
echo Copies extra binary dependencies to bin and test outputs for tools such as HLSLHost.exe.
goto :eof
