::
:: INTEL CONFIDENTIAL
:: Copyright 2016 Intel Corporation.
::
:: The source code contained or  described herein and all  documents related  to
:: the source code ("Material") are owned by  Intel Corporation or its suppliers
:: or licensors.  Title to the  Material remains with  Intel Corporation  or its
:: suppliers  and   licensors.  The  Material  may  contain  trade  secrets  and
:: proprietary  and   confidential  information of   Intel Corporation   and its
:: suppliers  and licensors,  and is  protected by  worldwide copyright and trade
:: secret laws  and  treaty provisions. No  part of the Material  may  be  used,
:: copied,   reproduced,  modified,  published,  uploaded, posted,  transmitted,
:: distributed,  or disclosed  in any way without  Intel's prior express written
:: permission.
::
:: No license  under  any patent, copyright,  trade secret or other intellectual
:: property right is granted to or  conferred upon you by disclosure or delivery
:: of the Materials,  either  expressly, by implication, inducement, estoppel or
:: otherwise.  Any  license under such  intellectual  property  rights  must  be
:: express and approved by Intel in writing.
::
:: Unless otherwise agreed by Intel in writing, you may not remove or alter this
:: notice  or  any other  notice  embedded  in  Materials  by  Intel  or Intel's
:: suppliers or licensors in any way.
::

@ECHO OFF

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

SET INSTALLER=SetupIOC.exe
SET ERROR_INTERNAL=1
SET ERROR_CMD_PARSE=2
SET ERROR_ADMIN_PRIV=3
SET EXIT_CODE=%ERROR_INTERNAL%
SET OP=install
SET FEATURE_OPTIONS=
SET LOG=

REM Test for admin rights
net session >nul 2>&1
IF NOT "%ERRORLEVEL%"=="0" (
    ECHO ERROR: Administrative privileges required
    EXIT /B %ERROR_ADMIN_PRIV%
)

:PARSE
IF [%1]==[] GOTO ENDPARSE
SET P=%~1
IF /I "%P%"=="/U" (
    SET OP=uninstall
) ELSE IF /I "%P%"=="/HELP" (
    GOTO USAGE
) ELSE IF "%P%"=="/?" (
    GOTO USAGE
) ELSE IF "%P:~0,1%"=="/" (
    ECHO ERROR: Invalid flag "%P%"
    GOTO USAGE
) ELSE IF "%P:~0,1%"=="-" (
    ECHO ERROR: Invalid flag "%P%"
    GOTO USAGE
) ELSE IF "%P%"=="IOC_ADD_SECUREPAY" (
    SET FEATURE_OPTIONS=!FEATURE_OPTIONS! IOC_ADD_SECUREPAY=%2
    SHIFT
) ELSE IF "%P%"=="IOC_ADD_FIDO" (
    SET FEATURE_OPTIONS=!FEATURE_OPTIONS! IOC_ADD_FIDO=%2
    SHIFT
) ELSE IF "%P%"=="IOC_ONLY_SECUREPAY" (
    SET FEATURE_OPTIONS=!FEATURE_OPTIONS! IOC_ONLY_SECUREPAY=%2
    SHIFT
) ELSE IF "%P%"=="IOC_DISABLE_FIDO_U2F" (
    SET FEATURE_OPTIONS=!FEATURE_OPTIONS! IOC_DISABLE_FIDO_U2F=%2
    SHIFT
) ELSE IF "%P%"=="IOC_DISABLE_FIDO_SILENT" (
    SET FEATURE_OPTIONS=!FEATURE_OPTIONS! IOC_DISABLE_FIDO_SILENT=%2
    SHIFT
) ELSE (
    SET LOG=%P%
    IF NOT [%2]==[] (
        ECHO ERROR: Invalid log file or variable name specified: %P%
        GOTO USAGE
    )
)
SHIFT
GOTO PARSE
:ENDPARSE

REM Check that name/value pairs were not provided for uninstall
IF "%OP%"=="uninstall" (
    IF NOT "%FEATURE_OPTIONS%"=="" (
        ECHO ERROR: name/value pairs are invalid for uninstall : %FEATURE_OPTIONS%
        GOTO USAGE
    )
)

REM Genarate a locale independent timestamp
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set ts=%%a
set timestamp=%ts:~0,14%


REM If no logging is specified, we still log to a file in %TEMP%
IF "%LOG%"=="" (
    SET LOG_FILE=IOClog_!timestamp!.txt
    SET LOG_DIR=%TEMP%\
    SET LOG=!LOG_DIR!!LOG_FILE!
) ELSE (
    :: set folderpath1/filename1
    call :sub_expand "%LOG%"
    SET LOG_FILE=!filename1!
    SET LOG_DIR=!folderpath1!
    IF NOT EXIST !LOG_DIR!NUL (
        ECHO ERROR: log "%LOG%" invalid - folder "!LOG_DIR!" missing
        GOTO USAGE
    )
)

REM Cleanup any leftover logs
DEL /S /Q /F "%LOG_DIR%__IOClog__"* "%LOG%" >nul 2>&1

:PROCESS
    REM install/uninstall bundle quietly using specified feature flags
    SET INSTALLER_OPTIONS=/%OP% /norestart /quiet /log "%LOG_DIR%__IOClog__%LOG_FILE%"
    START /WAIT %INSTALLER% %INSTALLER_OPTIONS% %FEATURE_OPTIONS%
    SET EXIT_CODE=%ERRORLEVEL%

    FOR %%I IN ("%LOG_DIR%__IOClog__"*) DO (
        ECHO.
        ECHO.
        ECHO ********** %%I **********
        TYPE "%%I"
    ) >> "%LOG%"

    (
        ECHO.
        ECHO.
        ECHO ********** FINAL RESULT **********
        ECHO ResultCode=%EXIT_CODE%
    ) >> "%LOG%"

    REM Cleanup individual logs
    DEL /S /Q /F "%LOG_DIR%__IOClog__"* >nul 2>&1

    GOTO END

:END
EXIT /B %EXIT_CODE%

:USAGE
ECHO.
ECHO USAGE: setup.cmd [/U] [/HELP] [name1=val1 name2=val2 ...] [logfile]
ECHO.
ECHO	Perform silent install/uninstall of the Intel(R) Online Connect product
ECHO.
ECHO	/U          - Do uninstall. The default is to install.
ECHO	/HELP       - Print this usage message.
ECHO	logfile     - Use this file to create the aggregate installation log.
ECHO	              If provided, this must be the last parameter.
ECHO	name=value  - Specify values for recognized names.
ECHO	              name/value pairs are for install only.
ECHO.
ECHO	Accepted names for name/value pairs:
ECHO		IOC_ADD_FIDO
ECHO		IOC_ADD_SECUREPAY
ECHO		IOC_ONLY_SECUREPAY
ECHO		IOC_DISABLE_FIDO_U2F
ECHO		IOC_DISABLE_FIDO_SILENT
EXIT /B %ERROR_CMD_PARSE%

:: sub_expand: takes in path and returns dir/file in folderpath1/filename1
:sub_expand
SET filename1=%~nx1
SET folderpath1=%~dp1
GOTO :eof
