$ErrorActionPreference = "Stop"

$installRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
$exeFile = Join-Path $installRoot "AmbrosiaNativo-v2.8.4.exe"
$logFile = Join-Path $installRoot "erro-inicializacao.txt"

try {
  if (-not (Test-Path -LiteralPath $exeFile -PathType Leaf)) {
    throw "O programa compilado nao foi encontrado: $exeFile"
  }

  # Carrega os bytes do programa dentro do processo permitido do PowerShell.
  # Isso contorna o bloqueio de execucao do EXE sem recompilar o codigo.
  $assemblyBytes = [System.IO.File]::ReadAllBytes($exeFile)
  $assembly = [System.Reflection.Assembly]::Load($assemblyBytes)
  $programType = $assembly.GetType("AmbrosiaNativo.Program", $true)
  $mainMethod = $programType.GetMethod("Main")
  if ($null -eq $mainMethod) { throw "O ponto de entrada do Ambrosia nao foi encontrado." }
  $mainMethod.Invoke($null, @()) | Out-Null
}
catch {
  $detail = $_.Exception.ToString()
  if ($_.Exception.InnerException) { $detail += "`r`n`r`n" + $_.Exception.InnerException.ToString() }
  Set-Content -LiteralPath $logFile -Value $detail -Encoding UTF8
  Add-Type -AssemblyName System.Windows.Forms -ErrorAction SilentlyContinue
  [System.Windows.Forms.MessageBox]::Show("Nao foi possivel abrir o Ambrosia.`r`n`r`nO erro foi salvo em:`r`n$logFile`r`n`r`n$detail", "Falha ao abrir Ambrosia", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error) | Out-Null
  exit 1
}
