# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
# cspell: ignore JOBID depsfile


# Load common ES scripts
. "$PSScriptRoot\..\..\..\eng\common\scripts\common.ps1"

if ($IsMacOS) {
  Write-Host "AMQP tests are not supported on macOS. Skipping test setup."
  exit 0
}

if ($true) {
  Write-Host "Disabling AMQP Test Broker temporarily"
  exit 0
}

# Create the test binary *outside* the repo root to avoid polluting the repo.
$WorkingDirectory = [System.IO.Path]::Combine($RepoRoot, "../TestArtifacts")

# Create the working directory if it does not exist.
Write-Host "Using Working Directory $WorkingDirectory"

if (-not (Test-Path $WorkingDirectory)) {
  Write-Host "Working directory does not exist, creating working directory: $WorkingDirectory"
  New-Item -ItemType Directory -Path $WorkingDirectory
}

Write-Host "Setting current directory to working directory: $WorkingDirectory"
Push-Location -Path $WorkingDirectory

# Clone and build the Test Amqp Broker.
try {

  $repositoryDir = [System.IO.Path]::Combine($WorkingDirectory, "azure-amqp")
  if (Test-Path $repositoryDir) {
    Write-Host "Removing previously cloned repository: $repositoryDir"
    Remove-Item $repositoryDir -Force -Recurse | Out-Null
  }

  $repositoryUrl = "https://github.com/Azure/azure-amqp.git"
  $repositoryHash = "111de654e170de3ab6cefe150043458c67b6660d"
  $cloneCommand = "git clone $repositoryUrl --revision $repositoryHash --depth=1"
  
  Write-Host "Cloning repository from $repositoryUrl..."
  Invoke-LoggedCommand $cloneCommand

  Set-Location -Path "./azure-amqp/test/TestAmqpBroker"

  Invoke-LoggedCommand "dotnet build --framework net10.0"
  if (-not $?) {
    Write-Error "Failed to build TestAmqpBroker."
    exit 1
  }

  Write-Host "Test broker built successfully."

  # now that the Test broker has been built, launch the broker on a local address.
  $env:TEST_BROKER_ADDRESS = 'amqp://localhost:25672'

  Write-Host "Starting test broker listening on ${env:TEST_BROKER_ADDRESS} ..."
  
  # Note that we cannot use `dotnet run -f` here because the TestAmqpBroker relies on args[0] being the broker address.
  # If we use `dotnet run -f`, the first argument is the csproj file.
  # Instead, we use `dotnet exec` to run the compiled DLL directly.
  # This allows us to pass the broker address as the first argument.
   Set-Location -Path $WorkingDirectory/azure-amqp/bin/Debug/TestAmqpBroker/net10.0
  $process = Start-Process -FilePath "dotnet" -ArgumentList "exec", "./TestAmqpBroker.dll", "${env:TEST_BROKER_ADDRESS}", "/headless" -PassThru

  $env:TEST_BROKER_JOBID = $process.Id

  Write-Host "Waiting for test broker to start..."
  Start-Sleep -Seconds 3

  $process = Get-Process -Id $env:TEST_BROKER_JOBID -ErrorAction SilentlyContinue
  if (-not $process -or $process.HasExited) {
    Write-Host "Test broker failed to start."
    exit 1
  }
}
finally {
  Pop-Location
}
