Private/Wizard/Read-CgrWizardInput.ps1

function Read-CgrWizardInput {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string] $Prompt,

        [AllowEmptyString()]
        [string] $DefaultValue,

        [switch] $AllowHelp,

        [switch] $AllowBack,

        [switch] $AllowCancel,

        [switch] $AllowFilter,

        [switch] $AllowList,

        [switch] $AllowPreviousPage,

        [switch] $AllowNextPage
    )

    $navigationParts = [System.Collections.Generic.List[string]]::new()
    if ($AllowFilter) { $navigationParts.Add('[F filter]') }
    if ($AllowList) { $navigationParts.Add('[L list]') }
    if ($AllowPreviousPage) { $navigationParts.Add('[P previous]') }
    if ($AllowNextPage) { $navigationParts.Add('[N next]') }
    if ($AllowHelp) { $navigationParts.Add('[? help]') }
    if ($AllowBack) { $navigationParts.Add('[B back]') }
    if ($AllowCancel) { $navigationParts.Add('[C cancel]') }

    $promptParts = [System.Collections.Generic.List[string]]::new()
    $promptParts.Add((Format-CgrWizardText -Text $Prompt -Style Prompt))
    if ($navigationParts.Count -gt 0) {
        $promptParts.Add((Format-CgrWizardText -Text ($navigationParts -join ' ') -Style Hint))
    }
    if (-not [string]::IsNullOrWhiteSpace($DefaultValue)) {
        $promptParts.Add((Format-CgrWizardText -Text ("({0})" -f $DefaultValue) -Style Hint))
    }

    Read-Host -Prompt ($promptParts -join ' ')
}