lib/UI.Banner.ps1


function Write-Banner {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, Position = 1)]
        [String]
        $String,

        [Parameter(Mandatory = $false)]
        [String]
        $EdgeCharacter = "*",
        
        [Parameter(Mandatory = $false)]
        [System.ConsoleColor]
        $ForegroundColor = "Blue",
        
        [Parameter(Mandatory = $false)]
        [System.ConsoleColor]
        $BackgroundColor = "Black",
        
        [Parameter(Mandatory = $false)]
        [Int32]
        $PaddingSpaces = 8
    )
    
    ## When running in TMConsole, print a Metadata string, and not a standard Write-Host


    ## Add a prefix to handle this Write-Host output, to be handled by TMC
    # $BannerMetadata = [PSCustomObject]@{
    # Type = 'Banner'
    # EdgeCharacter = $EdgeCharacter
    # ForegroundColor = $ForegroundColor
    # BackgroundColor = $BackgroundColor
    # Message = $String
    # } | ConvertTo-Json -Compress
    
    # $BannerMetadataString = '||TMC:' + $BannerMetadata
    # $BannerMetadataString = ''
    

    ## Calculate the Tab Spacing the string requires
    ## {edgeCharacter}{paddingSpaces*N}$String{paddingSpaces*n}{edgeCharacter}
    $StringCharacterCount = $String.Length + ($PaddingSpaces * 2) + ($EdgeCharacter.Length * 2)

    ## Create a Banner Pad Row to use as the Header/Footer
    $BannerPadRowStringBuilder = [System.Text.StringBuilder]::new()
    for ($i = 0; $i -lt $StringCharacterCount ; $i++) {
        [void]$BannerPadRowStringBuilder.Append($EdgeCharacter)
    }
    $BannerPadRow = $BannerPadRowStringBuilder.ToString()

    
    ## Create the Banner Text String
    $BannerString = [System.Text.StringBuilder]::new()

    ## Write the Text Banner
    [void]$BannerString.Append($EdgeCharacter)
    for ($i = 0; $i -lt $PaddingSpaces; $i++) { [void]$BannerString.Append(' ') }
    [void]$BannerString.Append($String)
    for ($i = 0; $i -lt $PaddingSpaces; $i++) { [void]$BannerString.Append(' ') }
    [void]$BannerString.Append($EdgeCharacter)
    
    ## Print the Banner
    # $OutputString = "$($BannerMetadataString)`n$($BannerPadRow)`n$($BannerString)`n$($BannerPadRow)`n`n"
    $OutputString = "`n$($BannerPadRow)`n$($BannerString)`n$($BannerPadRow)`n"
    $OutputString | Write-Host -ForegroundColor $ForegroundColor -BackgroundColor $BackgroundColor

}