:: Check to ensure that the VSDev command prompt is in the below location
echo "Starting VSDev Command Prompt"
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"

echo %PATH%

set DISABLE_REBUILD=true
set NODE_REQUIRED_VERSION=18.16.0
set SNYK_ORG=sda
set SNYK_PROJECT_NAME="Symphony Desktop Application"

set PATH=%PATH%;C:\Program Files\nodejs\;C:\Program Files\Git\cmd
echo %PATH%

set PATH=%PATH%;C:\Program Files (x86)\GnuWin32\bin
echo %PATH%

call nvm install %NODE_REQUIRED_VERSION%
call nvm use %NODE_REQUIRED_VERSION%

call npm config set msvs_version 2017
set VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets

WHERE gulp
if %ERRORLEVEL% NEQ 0 (
  echo "GULP does not exist. Installing it."
  call npm i gulp -g
)

WHERE snyk
if %ERRORLEVEL% NEQ 0 (
  echo "Snyk does not exist! Installing and setting it up"
  call npm i snyk -g
)

echo "Setting snyk org to %SNYK_ORG% and api token to %SNYK_API_TOKEN%"
call snyk config set org=%SNYK_ORG%
call snyk config set api=%SNYK_API_TOKEN%

:: Below command replaces buildVersion with the appropriate build number from jenkins
sed -i -e "s/\"buildNumber\"[[:space:]]*\:[[:space:]]*\".*\"/\"buildNumber\": \"%PARENT_BUILD_VERSION%\"/g" package.json
sed -i -e "s/\"version\"[[:space:]]*\:[[:space:]]\"\(.*\)\"/\"version\": \"\1-%PARENT_BUILD_VERSION%\"/g" package.json

echo "Installing dependencies..."
call npm install

:: Signing screen snippet and screen share indicator

if NOT EXIST %SIGNING_FILE_PATH% (
    echo Signing failed, 'signing.bat' not found.
    exit /b -1
)

call %SIGNING_FILE_PATH% node_modules\screen-share-indicator-frame\ScreenShareIndicatorFrame.exe

call %SIGNING_FILE_PATH% node_modules\symphony-native-window-handle-helper\SymphonyNativeWindowHandleHelper.exe


IF %errorlevel% neq 0 (
	echo "Signing failed"
	exit /b -1
)

call %SIGNING_FILE_PATH% node_modules\screen-snippet\ScreenSnippet.exe
IF %errorlevel% neq 0 (
	echo "Signing failed"
	exit /b -1
)

# Run Snyk Security Tests
echo "Running snyk security tests"
call snyk test --file=package-lock.json --org=%SNYK_ORG%
call snyk monitor --file=package-lock.json --org=%SNYK_ORG% --project-name=%SNYK_PROJECT_NAME%

:: Set expiry if required
IF "%EXPIRY_PERIOD%"=="" (
    echo "Not setting expiry for the build!"
) else (
    echo "Setting expiry to days: %EXPIRY_PERIOD%"
    call gulp setExpiry --period %EXPIRY_PERIOD%
)

echo "Running tests, code coverage, linting and building..."
call npm run unpacked-win

echo "creating 64 bit msi..."

set PATH="%PATH%";C:\Program Files\nodejs\
echo %PATH%

call node -e "console.log(require('./package.json').version);" > version.txt
set /p baseVer=<version.txt

set SYMVER=%baseVer%
if NOT DEFINED SYMVER (
	echo "environment variable SYMVER not defined"
	exit /b -1
)

echo "creating targets directory for symphony version: " %SYMVER%
rmdir /q /s targets
mkdir targets
set targetsDir="%CD%\targets\"

IF "%EXPIRY_PERIOD%"=="0" (
    set archiveName=Symphony-Win64-%SYMVER%
) else (
    set archiveName=Symphony-Win64-%SYMVER%-TTL-%EXPIRY_PERIOD%
)

set installerDir="%CD%\installer\win"
set distDir="%CD%\dist"
set rootDir="%CD%"

if NOT EXIST "%PFX_DIR%\%PFX_FILE%" (
  echo "can not find .pfx file" "%pfxDir%\%pfxFile%"
  exit /b -1
)

copy /y "%PFX_DIR%\%PFX_FILE%" "%installerDir%\%PFX_FILE%"

cd %installerDir%


call %SIGNING_FILE_PATH% ..\..\dist\win-unpacked\Symphony.exe
IF %errorlevel% neq 0 (
	echo "Signing failed"
	exit /b -1
)

call %SIGNING_FILE_PATH% ..\..\dist\Symphony-%SYMVER%-win.exe
IF %errorlevel% neq 0 (
	echo "Signing failed"
	exit /b -1
)


node ..\..\scripts\windows_update_checksum.js "..\..\dist\Symphony-%SYMVER%-win.exe" "..\..\dist\latest.yml"

echo "Building new installer with Wix Sharp"
call "BuildWixSharpInstaller.bat"

call %SIGNING_FILE_PATH% WixSharpInstaller\Symphony.msi
IF %errorlevel% neq 0 (
	echo "Failed to sign installer"
	exit /b -1
)

echo "Copying New MSI installer to target dir"
copy "WixSharpInstaller\Symphony.msi" "%targetsDir%\%archiveName%.msi"

echo "Setting up markdown to pdf package"
%SystemRoot%\System32\where.exe /q markdown-pdf
if ERRORLEVEL 1 (
    echo "Markdown to PDF package missing, installing it now."
    call npm install -g markdown-pdf
)

echo "Generating installation instructions"
call %appdata%\npm\markdown-pdf install_instructions_win.md
copy install_instructions_win.pdf "%targetsDir%\Install-Instructions-%archiveName%.pdf"

echo Generate release notes
cd %rootDir%
call %appdata%\npm\markdown-pdf RELEASE_NOTES.md
copy RELEASE_NOTES.pdf "%targetsDir%\Release-Notes-%archiveName%.pdf"

echo "All done, job successful :)"