@echo off
setlocal EnableExtensions EnableDelayedExpansion

REM ===== スクリプトの場所を作業ディレクトリに固定 =====
pushd "%~dp0"

REM ===== 管理者権限チェック & UAC 昇格 =====
net session >nul 2>&1
if %errorlevel% neq 0 (
    REM [情報] 管理者権限がありません。UAC で昇格を要求します...
    powershell -Command "Start-Process -FilePath '%~f0' -Verb RunAs"
    exit /b
)

REM [情報] 管理者権限で実行中です。

set "NEED_REBOOT_OVERALL=0"

echo インストールを開始しました。
REM ============================================================
REM ===============  インストール 1: Driver  ====================
REM ============================================================
:DRIVERINSTALL
if not exist "%CD%\Driver" (
    goto :VCINSTALL
)
REM ---------------- Driver インストール開始 ----------------
set "DPINST=%CD%\driver\dpinst.exe"
if not exist "%DPINST%" (
    REM [エラー] driver\dpinst.exe が見つかりません。処理を中止します。
    goto :FAIL
)
 
REM [情報] dpinst を実行します: dpinst.exe /f /sa /sw
"%DPINST%" /f /sa /sw
set "RC=%ERRORLEVEL%"
REM [情報] dpinst の戻り値(10進): !RC!
 
REM ---- 戻り値 0xWWXXYYZZ を安全に分解（括弧簡略化 & 演算子エスケープ）----
set /a "ZZ=RC & 0xFF"
set /a "WW=RC >> 24"
set /a "WW=WW & 0xFF"
set /a "NEEDREBOOT=WW & 0x40"
 
if not "!ZZ!"=="1" (
    REM [エラー] Driver のインストールに失敗しました。ZZ=!ZZ!  処理を中止します。
    goto :FAIL
)
 
REM [成功] Driver のインストールが完了しました。
if not "!NEEDREBOOT!"=="0" (
    REM [注意] システムの再起動が必要です。（ドライバーの反映のため）
    set "NEED_REBOOT_OVERALL=1"
)

set "IMPORTREG=%CD%\driver\type01.reg"
if exist "%IMPORTREG%" (
    regedit.exe /s "%IMPORTREG%"
)

REM ============================================================
REM ============  インストール 2: VC Runtime  ==================
REM ============================================================
:VCINSTALL
REM --------------- VC Runtime インストール開始 ---------------
set "VCX64=%CD%\VCRuntime\VC_redist.x64.exe"
 
if exist "%VCX64%" (
    REM [情報] x64 ランタイムをインストールします...
    "%VCX64%" /install /quiet /norestart
    REM [情報] x64 インストーラー戻り値: !ERRORLEVEL!
) else (
    REM [警告] VCRuntime\VC_redist.x64.exe が見つかりません。スキップします。
)
 
REM [成功] VC Runtime セクションは既定通りに完了しました。

REM ============================================================
REM =================  インストール 3: APP  ====================
REM ============================================================
:APPINSTALL
if not exist "%CD%\APP" (
    goto :SUCCESS
)
REM ------------------- APP インストール開始 -------------------
set "APPSETUP=%CD%\APP\PRODUCTT.exe"
if not exist "%APPSETUP%" (
    REM [エラー] APP\PRODUCTT.exe が見つかりません。処理を中止します。
    goto :FAIL
)
 
REM [情報] アプリをインストールします...
"%APPSETUP%" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
set "ARC=%ERRORLEVEL%"
REM [情報] アプリ インストーラー戻り値: !ARC!
 
if "!ARC!"=="0" (
    REM [成功] APP のインストールが完了しました。
) else if "!ARC!"=="8" (
    REM [成功] APP のインストールが完了しましたが、再起動が必要です。
    set "NEED_REBOOT_OVERALL=1"
) else (
    REM [エラー] APP のインストールに失敗しました。コード=!ARC!  処理を中止します。
    goto :FAIL
)

REM ------------------- SETUPUTL インストール開始 -------------------
set "SETUPUTL=%CD%\APP\SETUPUTL.exe"
if not exist "%SETUPUTL%" (
    REM [エラー] APP\SETUPUTL.exe が見つかりません。処理を中止します。
    goto :FAIL
)
 
REM [情報] SETUPUTLをインストールします...
"%SETUPUTL%" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
set "ARC=%ERRORLEVEL%"
REM [情報] SETUPUTL インストーラー戻り値: !ARC!
 
if "!ARC!"=="0" (
    REM [成功] SETUPUTL のインストールが完了しました。
) else if "!ARC!"=="8" (
    REM [成功] SETUPUTL のインストールが完了しましたが、再起動が必要です。
    set "NEED_REBOOT_OVERALL=1"
) else (
    REM [エラー] SETUPUTL のインストールに失敗しました。コード=!ARC!  処理を中止します。
    goto :FAIL
)

:SUCCESS
REM.
REM ===========================================================
REM [完了] すべてのインストールが正常に完了しました。
echo インストールに成功しました。
if not "!NEED_REBOOT_OVERALL!"=="0" (
    REM [注意] 変更を有効にするため、システムの再起動を推奨します。
)

goto :END
 
:FAIL
REM.
REM ===========================================================
REM [失敗] インストール処理はエラーにより中断されました。
REM ===========================================================
echo インストールに失敗しました。
pause
exit /b 1
 
:END
popd
endlocal
pause
exit /b 0