# Espera o AMo.exe aparecer e injeta o hook de captura.
#
# Por que este script existe: o injector.exe sozinho, lancado ANTES do jogo, saiu sem injetar
# (23/08). A hipotese e que ele injeta cedo demais -- antes do ws2_32 estar carregado, ou
# desiste de esperar. Aqui a gente espera o processo existir E dar alguns segundos de vida
# antes de injetar, e depois CONFERE se o log foi criado.
$ErrorActionPreference = 'Continue'

Write-Host 'vigiando... abra o jogo agora (aguardo ate 5 minutos)'
$limite = (Get-Date).AddMinutes(5)
$amo = $null
while ((Get-Date) -lt $limite) {
    $amo = Get-Process AMo -ErrorAction SilentlyContinue
    if ($amo) { break }
    Start-Sleep -Milliseconds 400
}
if (-not $amo) { Write-Host 'tempo esgotado, AMo.exe nao apareceu.'; exit 1 }

# Espera CURTA de proposito. Em 23/08 esperamos 5s e so veio SEND: o client ja tinha postado
# os WSARecv pendentes antes do hook existir, entao o GetQueuedCompletionStatus completava
# operacoes que o pending_add nunca registrou. Quanto mais cedo injetar, melhor -- so nao da
# pra injetar antes do ws2_32 carregar, dai 1.5s.
Write-Host "AMo.exe apareceu (PID $($amo.Id)). Injetando em 1.5s..."
Start-Sleep -Milliseconds 1500

for ($i = 1; $i -le 3; $i++) {
    Write-Host "tentativa $i de injecao..."
    & 'D:\RoshEmulator\tools\hook\injector.exe' | Out-Null
    Start-Sleep -Seconds 2
    if (Test-Path 'C:\RoshHook\traffic.log') {
        $t = Get-Item 'C:\RoshHook\traffic.log'
        Write-Host "hook ativo, traffic.log com $($t.Length) bytes" -ForegroundColor Green
        # CONFERE O RECV: sem ele a captura nao serve. Melhor descobrir agora do que
        # depois do jogador passar dez minutos jogando. Em 23/08 uma sessao inteira
        # foi perdida assim -- 206 frames, todos SEND.
        Write-Host 'conferindo se o RECV esta sendo gravado (ate 90s)...'
        $ate = (Get-Date).AddSeconds(90)
        while ((Get-Date) -lt $ate) {
            if (Select-String -Path 'C:\RoshHook\traffic.log' -Pattern '\] RECV sock=' -CaseSensitive -Quiet) {
                Write-Host 'OK: RECV confirmado -- pode logar e entrar no mundo.' -ForegroundColor Green
                exit 0
            }
            Start-Sleep -Seconds 2
        }
        Write-Host 'ATENCAO: so SEND, nenhum RECV em 90s.' -ForegroundColor Yellow
        Write-Host 'Feche o jogo e rode de novo -- captura sem RECV nao serve.' -ForegroundColor Yellow
        exit 2
    }
    Start-Sleep -Seconds 3
}
Write-Host 'FALHOU: traffic.log nao foi criado depois de 3 tentativas.' -ForegroundColor Red
exit 1
