public/Start-SplitterUi.ps1

<#
.SYNOPSIS
Starts the Splitter desktop UI powered by GliderUI.
 
.DESCRIPTION
Loads a GliderUI/Avalonia window for planning and running edition-specific
Split-WindowsInstallMedia operations with guided preflight checks.
 
.PARAMETER NoWait
Shows the window and returns immediately without waiting for the window to close.
 
.PARAMETER UiScriptPath
Optional path to a UI script file. Defaults to ui\splitterui.ps1 in this module.
 
.EXAMPLE
Start-SplitterUi
 
.EXAMPLE
Start-SplitterUi -NoWait
#>

function Start-SplitterUi {
    [CmdletBinding()]
    param(
        [switch]
        $NoWait,

        [string]
        $UiScriptPath
    )

    if ($PSVersionTable.PSVersion -lt [version] '7.4.0') {
        throw 'Start-SplitterUi requires PowerShell 7.4 or newer because GliderUI requires PowerShell 7.4+.'
    }

    $importGliderUiModuleParams = @{
        Name = 'GliderUI'
        ErrorAction = 'Stop'
    }
    Import-Module @importGliderUiModuleParams

    if ([string]::IsNullOrWhiteSpace($UiScriptPath)) {
        $UiScriptPath = Join-Path $PSScriptRoot '..\ui\splitterui.ps1'
    }

    $resolveUiScriptPathParams = @{
        Path = $UiScriptPath
        ErrorAction = 'Stop'
    }
    $resolvedUiScriptPath = Resolve-Path @resolveUiScriptPathParams

    $dotSourceUiScript = $resolvedUiScriptPath.ProviderPath
    . $dotSourceUiScript

    $newSplitterUiWindowCommand = Get-Command -Name 'New-SplitterUiWindow' -ErrorAction SilentlyContinue
    if ($null -eq $newSplitterUiWindowCommand) {
        throw "UI script '$dotSourceUiScript' did not define New-SplitterUiWindow."
    }

    $ui = New-SplitterUiWindow
    if ($null -eq $ui) {
        throw "UI script '$dotSourceUiScript' returned no UI object."
    }

    if ($null -eq $ui.Window) {
        throw "UI script '$dotSourceUiScript' returned no Window object."
    }

    if ($null -eq $ui.Controls) {
        throw "UI script '$dotSourceUiScript' returned no Controls hashtable."
    }

    $initializeSplitterUiParams = @{
        Window = $ui.Window
        Controls = $ui.Controls
    }
    Initialize-SplitterUi @initializeSplitterUiParams

    if ($NoWait) {
        $ui.Window.Show()
        return $ui.Window
    }

    $ui.Window.Show()
    $ui.Window.WaitForClosed()
}