@echo off 
@Rem Config tool : environment_commercial.bat
@Rem This windows batch script activates the commercial environment

@cls

echo * * * * * * * * * * * * * * * * * * * *
echo *                                     *
echo *  Activating commercial environment  *
echo *                                     *
echo * * * * * * * * * * * * * * * * * * * *

echo:
echo:
echo Terminating the 'Adsk Identity Manager' process ...
call :StopProcess
@Rem check if some error occurred.
IF %ERRORLEVEL% NEQ 0 ( 
      echo: 
      echo ERROR : Unable to stop the 'Adsk Identity Manager' process.
      echo:
      ENDLOCAL
      exit /b 1
   )
echo:
echo Success stop process! 

echo:
echo:
echo Clearing cache ...
call :ClearCache
@Rem check if some error occurred.
IF %ERRORLEVEL% NEQ 0 ( 
      echo: 
      echo ERROR : Cleaning cache failed !
      ENDLOCAL
      exit /b 1
   )
echo:
echo Success clear cache! 

echo:
echo:
echo Updating environment registry settings ...
call :UpdateRegistry
@Rem check if some error occurred.
IF %ERRORLEVEL% NEQ 0 ( 
      echo: 
      echo ERROR : Registry updation failed !
      ENDLOCAL
      exit /b 1
   )
echo:
echo Success ! 

echo:
echo:
echo:
echo Commercial environment successfully activated !

exit /B  0



@Rem function to stop the process - AdskIdentityManager.exe
:StopProcess
   SETLOCAL
   @Rem check if the process is running
   
   SET scriptDir=%~dp0
   Set "MyProcess=AdskIdentityManager.exe"
   %SystemRoot%\System32\tasklist.exe /NH /FI "imagename eq %MyProcess%" 2>nul | %SystemRoot%\System32\find.exe /i "%MyProcess%" >nul

   If errorlevel 1 (
   echo:
   echo INFO  : %MyProcess% is not running. 
   ENDLOCAL
   exit /b 0
   )
   
   @Rem kill the running process
   "%scriptDir%%MyProcess%" --quit_all

   @Rem wait 1 seconds for process to exit and release db file
   timeout /t 1 /nobreak > NUL
   GOTO LOOPING


:LOOPING
   ECHO START LOOPING... 
   SET /A "counter=0"
   GOTO LOOP


:LOOP
    IF %counter% LSS 4 (
        %SystemRoot%\System32\tasklist.exe /NH /FI "imagename eq %MyProcess%" 2>nul | %SystemRoot%\System32\find.exe /i "%MyProcess%" >nul
        ECHO Terminating attempt %counter%
        IF ERRORLEVEL 1 (
            GOTO CONTINUE
        ) ELSE (
            ECHO %MyProcess% is STILL running
            @Rem try kill the running process again
            "%scriptDir%%MyProcess%" --quit_all
            @Rem wait another 1 second for process to exit and release db file
            TIMEOUT /T 1 /nobreak > NUL
            SET /A "counter+=1"          
            GOTO LOOP
        )
    ) ELSE (
        GOTO CONTINUE
    )


:CONTINUE
   ECHO END LOOPING...
   ENDLOCAL
   exit /b 0


@Rem function to create the cache
:ClearCache
    SETLOCAL
    @set AppDataDir=%AppData%
    @for %%a in ("%AppData%") do set "AppDataDir=%%~dpa"
    @set cache=%AppDataDir%Local\Autodesk\Identity Services\idservices.db

    if exist "%cache%" (
        del /f/q "%cache%" > NUL 2>&1
        if exist "%cache%" (
            echo:
            echo INFO  : Unable to clear the %cache% file.
            echo         Please check, if the file is being used by another process.
            ENDLOCAL
            exit /B 1
        )
    )

    ENDLOCAL
    exit /b 0


:UpdateRegistry
    SETLOCAL
    %SystemRoot%\System32\reg.exe DELETE "HKEY_CURRENT_USER\Software\Autodesk\Common Desktop" /v "EnableFedRamp" /f /reg:64 > NUL 2>&1
    %SystemRoot%\System32\reg.exe QUERY "HKEY_CURRENT_USER\Software\Autodesk\Common Desktop" /v "EnableFedRamp" /reg:64 > NUL 2>&1

    IF %ERRORLEVEL% EQU 0 (     
        ENDLOCAL
        exit /b 1
    )

    ENDLOCAL
    exit /b 0