Private/Wait-GreenroomSession.ps1

# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (C) 2026 Tyler Vigario

<#
  Wait for an instance's session to appear, and return it.

  Confirms by observation: Start-ScheduledTask succeeding only means the watchdog was
  launched, not that a session came up behind it.
#>

function Wait-GreenroomSession {
    [CmdletBinding()]
    [OutputType('Greenroom.Instance')]
    param(
        [Parameter(Mandatory)][string]$Name,
        [int]$TimeoutSeconds = 60
    )

    $deadline = (Get-Date).AddSeconds($TimeoutSeconds)
    while ((Get-Date) -lt $deadline) {
        Start-Sleep -Milliseconds 750
        $found = @(Get-GreenroomInstance -Name $Name -WarningAction SilentlyContinue)
        if ($found.Count -eq 1 -and -not $found[0].Opaque) { return $found[0] }
    }
    return $null
}