@echo off
REM Install-Oracle11r2.cmd
REM   Expands the GE Oracle Client 11.2 Administrator zip to a temp dir and
REM   runs Oracle Universal Installer silently with the GE-customized
REM   response file.
REM
REM   Accepted zip locations (first hit wins):
REM     %~dp0Oracle_OracleDatabase_11r2_V03.zip         (preinstall flat)
REM     %~dp0..\apps\Oracle_OracleDatabase_11r2_V03.zip (SFLD share, enforcer)
REM
REM   Called by:
REM     - preinstall runner (Type=EXE, image build time)
REM     - Install-FromManifest.ps1 (Type=CMD, runtime enforcer)
REM
REM   Oracle 11.2 OUI exit codes worth knowing:
REM     0    = success
REM     3    = success but with warnings
REM     1    = general failure
REM     6    = silent install requested but missing / bad response file

setlocal enabledelayedexpansion
set "LOG=C:\Logs\OracleClient\install.log"
if not exist "C:\Logs\OracleClient" mkdir "C:\Logs\OracleClient"

REM Emit a datestamp
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value 2^>nul ^| find "="') do set LDT=%%I
set "STAMP=!LDT:~0,14!"

echo [%STAMP%] Install-Oracle11r2.cmd starting >> "%LOG%"

set "SRC_ZIP=%~dp0Oracle_OracleDatabase_11r2_V03.zip"
if not exist "%SRC_ZIP%" set "SRC_ZIP=%~dp0..\apps\Oracle_OracleDatabase_11r2_V03.zip"
set "STAGING=%TEMP%\oracle-11r2-install"
set "CLIENT_DIR=%STAGING%\Oracle_OracleDatabase_11r2_V03\client"
set "RSP=%CLIENT_DIR%\response\ge_client_install.rsp"

if not exist "%SRC_ZIP%" (
    echo [%STAMP%] ERROR: zip not found at %SRC_ZIP% >> "%LOG%"
    echo ERROR: zip not found at %SRC_ZIP%
    exit /b 2
)

echo [%STAMP%] Expanding %SRC_ZIP% to %STAGING% >> "%LOG%"
if exist "%STAGING%" rmdir /s /q "%STAGING%" >nul 2>&1
mkdir "%STAGING%"
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^
    "try { Expand-Archive -Path '%SRC_ZIP%' -DestinationPath '%STAGING%' -Force -ErrorAction Stop; exit 0 } catch { Write-Error $_; exit 1 }" ^
    >> "%LOG%" 2>&1

if not exist "%CLIENT_DIR%\setup.exe" (
    echo [%STAMP%] ERROR: expanded setup.exe not found at %CLIENT_DIR%\setup.exe >> "%LOG%"
    exit /b 3
)

if not exist "%RSP%" (
    echo [%STAMP%] ERROR: response file missing at %RSP% >> "%LOG%"
    exit /b 4
)

echo [%STAMP%] Running OUI silent install (this takes 2-8 minutes) >> "%LOG%"
"%CLIENT_DIR%\setup.exe" -silent -waitforcompletion -nowait ^
    -ignoreSysPrereqs ^
    -responseFile "%RSP%" >> "%LOG%" 2>&1
set RC=%ERRORLEVEL%

echo [%STAMP%] OUI exit code: %RC% >> "%LOG%"

REM --- Drop GE-customized tnsnames.ora / sqlnet.ora / ldap.ora into ORACLE_HOME.
REM     The zip ships these in client\ora\ but Oracle's setup.exe does not consume
REM     them - that copy is the GE Wise wrapper's job, which we bypass. Without
REM     these, every Oracle-dependent app (eDNC/UDC/NTLARS/CMM tooling) fails with
REM     ORA-12154 "TNS could not resolve the connect identifier specified".
REM
REM     Per-file override: if %~dp0<name>.ora exists (deployed alongside this
REM     wrapper on the PXE server / SFLD share), use it instead of the bundled
REM     copy. Lets us push an updated tnsnames.ora without repackaging the zip.
REM
REM     Only run when OUI succeeded (RC 0 or 3). On failure ORACLE_HOME may not
REM     be fully populated and the copy targets may not exist.
if %RC%==0 goto :do_ora_copy
if %RC%==3 goto :do_ora_copy
goto :skip_ora_copy

:do_ora_copy
set "ORA_DST=C:\Apps\product\11.2.0\client_1\network\admin"
if not exist "%ORA_DST%" (
    echo [%STAMP%] WARN: %ORA_DST% does not exist after OUI - skipping .ora copy >> "%LOG%"
    goto :skip_ora_copy
)
for %%F in (tnsnames.ora sqlnet.ora ldap.ora) do (
    set "ORA_SRC=%~dp0%%F"
    if not exist "!ORA_SRC!" set "ORA_SRC=%CLIENT_DIR%\ora\%%F"
    if exist "!ORA_SRC!" (
        echo [%STAMP%] Copying %%F from !ORA_SRC! to %ORA_DST%\%%F >> "%LOG%"
        copy /Y "!ORA_SRC!" "%ORA_DST%\%%F" >> "%LOG%" 2>&1
    ) else (
        echo [%STAMP%] WARN: %%F not found in either %~dp0 or %CLIENT_DIR%\ora >> "%LOG%"
    )
)

:skip_ora_copy

REM Cleanup staging dir to reclaim ~1.5 GB - OUI copies everything to ORACLE_HOME
echo [%STAMP%] Cleaning up staging dir >> "%LOG%"
rmdir /s /q "%STAGING%" >nul 2>&1

REM OUI returns 0 for success, 3 for success-with-warnings. Treat both as OK.
if %RC%==3 (
    echo [%STAMP%] OUI reported warnings but install succeeded - returning 0 >> "%LOG%"
    exit /b 0
)

exit /b %RC%
