# wait-for-internet.ps1 - Invoked by FlatUnattendW10-shopfloor.xml as Order 4
# during first logon, right before GCCH enrollment. Previously the logic was
# inline in the unattend's CommandLine attribute but the string exceeded
# Microsoft's SynchronousCommand CommandLine length limit and Windows rejected
# the whole answer file with "the answer file is invalid". Moved here to keep
# the unattend CommandLine short.
#
# Behaviour:
#   1. Print a 60-second prompt asking the tech to connect to production
#      network. Gives tower users a window to unplug PXE cable and re-cable
#      to a production port; laptop users are already on WiFi and can
#      press any key to skip.
#   2. Poll TCP 443 to login.microsoftonline.us for up to 10 minutes using
#      Test-NetConnection (NOT Test-Connection / ICMP - Microsoft 365 edges
#      do not reliably respond to ICMP, which previously caused infinite
#      "Waiting for internet connectivity..." loops on towers).
#   3. Always exit 0 so the unattend chain proceeds even if detection times
#      out - enrollment will retry on its own if the network is still broken.

Write-Host ''
Write-Host '========================================' -ForegroundColor Yellow
Write-Host '  Connect to PRODUCTION network NOW'      -ForegroundColor Yellow
Write-Host '  Towers: unplug PXE, plug into production' -ForegroundColor Yellow
Write-Host '  Laptops: WiFi should already be connected' -ForegroundColor Yellow
Write-Host '========================================' -ForegroundColor Yellow
Write-Host ''
Write-Host 'Auto-continuing in 60s (press any key to skip)...' -ForegroundColor Cyan

$end = (Get-Date).AddSeconds(60)
while ((Get-Date) -lt $end) {
    try {
        if ($Host.UI.RawUI.KeyAvailable) {
            $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
            break
        }
    } catch {}
    Start-Sleep -Milliseconds 500
}

Write-Host 'Waiting for internet connectivity (up to 10 min)...'
$deadline = (Get-Date).AddMinutes(10)
$ok = $false
while ((Get-Date) -lt $deadline) {
    try {
        if (Test-NetConnection -ComputerName login.microsoftonline.us -Port 443 -InformationLevel Quiet -WarningAction SilentlyContinue) {
            $ok = $true
            break
        }
    } catch {}
    Start-Sleep -Seconds 5
}

if ($ok) {
    Write-Host 'Internet connected.' -ForegroundColor Green
} else {
    Write-Host 'Internet wait timeout - proceeding anyway.' -ForegroundColor Yellow
}
exit 0
