$ErrorActionPreference = 'Continue'
try { [Console]::OutputEncoding = [Text.Encoding]::UTF8; $OutputEncoding = [Text.Encoding]::UTF8 } catch {}
$root = Split-Path -Parent $MyInvocation.MyCommand.Path
$agent = Join-Path $root 'agent.ps1'
$statusPath = Join-Path $root 'update-status.txt'

function Wait-AgentUpdate {
  $deadline = (Get-Date).AddSeconds(90)
  while ((Get-Date) -lt $deadline) {
    if (Test-Path -LiteralPath $statusPath) {
      $status = (Get-Content -LiteralPath $statusPath -Raw -ErrorAction SilentlyContinue).Trim()
      if ($status -eq 'done') { return $true }
      if ($status -like 'failed*') { return $false }
    }
    Start-Sleep -Seconds 2
  }
  return $false
}

while ($true) {
  Clear-Host
  Write-Host 'FlowInsta BR Agent' -ForegroundColor Yellow
  Write-Host ''
  & powershell.exe -NoProfile -ExecutionPolicy Bypass -File $agent
  $code = if ($LASTEXITCODE -ne $null) { [int]$LASTEXITCODE } else { 0 }

  if ($code -eq 22) {
    Write-Host ''
    Write-Host 'Atualização baixada. Aguardando instalar os arquivos novos...' -ForegroundColor Yellow
    if (Wait-AgentUpdate) {
      Write-Host 'Reabrindo o Agent atualizado agora...' -ForegroundColor Green
      Start-Sleep -Seconds 2
      continue
    }
    Write-Host 'Não foi possível confirmar a atualização. Feche esta janela, abra ABRIR_AGENT.cmd e avise o suporte se repetir.' -ForegroundColor Red
    Read-Host 'Pressione Enter para fechar esta janela'
    exit 22
  }

  Write-Host ''
  if ($code -eq 0) {
    Write-Host 'O Agent foi encerrado normalmente.' -ForegroundColor Gray
  } else {
    Write-Host "O Agent encerrou com erro (código $code). Log local: $root\agent.log" -ForegroundColor Red
  }
  Write-Host ''
  Read-Host 'Pressione Enter para fechar esta janela'
  exit $code
}
