Private/Tui/Resolve-HydrationTuiOptionSelection.ps1

function Resolve-HydrationTuiOptionSelection {
    [CmdletBinding()]
    [OutputType([object[]])]
    param(
        [Parameter(Mandatory)]
        [object[]]$Options,

        [Parameter()]
        [AllowEmptyString()]
        [string]$Selection,

        [Parameter()]
        [switch]$AllowAllKeyword
    )

    $tokens = @($Selection -split '[,\s]+' | Where-Object { -not [string]::IsNullOrWhiteSpace($_) })
    if ($tokens.Count -eq 0) {
        return @()
    }

    $selectedOptions = [System.Collections.Generic.List[object]]::new()
    $selectedNumbers = [System.Collections.Generic.HashSet[int]]::new()

    foreach ($token in $tokens) {
        $trimmedToken = $token.Trim()
        if ($AllowAllKeyword -and $trimmedToken.Equals('all', [System.StringComparison]::OrdinalIgnoreCase)) {
            $trimmedToken = '0'
        }

        $number = 0
        if (-not [int]::TryParse($trimmedToken, [ref]$number)) {
            throw "Invalid selection '$token'. Enter option numbers separated by commas."
        }

        $match = $Options | Where-Object { $_.Number -eq $number } | Select-Object -First 1
        if (-not $match) {
            throw "Invalid option number '$number'."
        }

        if ($selectedNumbers.Add($number)) {
            $selectedOptions.Add($match)
        }
    }

    return $selectedOptions.ToArray()
}