Private/PowerTree/Output/Show-TreeStats.ps1

function Show-TreeStats {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [object]$TreeStats,
        
        [Parameter(Mandatory=$true)]
        [System.TimeSpan]$ExecutionTime,
        
        [Parameter(Mandatory=$false)]
        [System.Text.StringBuilder]$OutputBuilder = $null,
        
        [Parameter(Mandatory=$false)]
        [hashtable]$LineStyle = @{ SingleLine = '-' },
        
        [Parameter(Mandatory=$false)]
        [bool]$DisplaySize = $false
    )
    
    $formattedTime = Format-ExecutionTime -ExecutionTime $ExecutionTime
    
    $headers = @(
        "Files",
        "Folders",
        "Total Items",
        "Depth",
        "Total Size",
        "Execution Time"
    )
    
    $totalItemsPrinted = $TreeStats.FilesPrinted + $TreeStats.FoldersPrinted
    
    $values = @(
        $TreeStats.FilesPrinted,
        $TreeStats.FoldersPrinted,
        $totalItemsPrinted,
        $TreeStats.MaxDepth,
        $(Get-HumanReadableSize -Bytes $TreeStats.TotalSize -Format "Padded"),
        $formattedTime
    )
    
    $spacing = " "
    
    $headerLine = ""
    foreach ($header in $headers) {
        $headerLine += $header + $spacing
    }
    
    $underscoreLine = ""
    foreach ($header in $headers) {
        $underscoreLine += $LineStyle.SingleLine * $header.Length + $spacing
    }
    
    $valuesLine = ""
    for ($i = 0; $i -lt $headers.Count; $i++) {
        $value = $values[$i].ToString()
        $valuesLine += $value.PadRight($headers[$i].Length) + $spacing
    }
    
    $largestFilePath = if ($null -ne $TreeStats.LargestFile) { $TreeStats.LargestFile.FullName } else { "None" }
    $largestFileSize = if ($null -ne $TreeStats.LargestFile) { Get-HumanReadableSize -Bytes $TreeStats.LargestFile.Length -Format "Padded" } else { "0 B" }
    $largestFolderSize = Get-HumanReadableSize -Bytes $TreeStats.LargestFolderSize -Format "Padded"
    
    if ($null -ne $OutputBuilder) {
        $placeholderText = "Append the stats here later!!"
        
        $statsContent = @"
$headerLine
$underscoreLine
$valuesLine
 
"@

        
        if ($DisplaySize) {
            $statsContent += @"
 
Largest File: $largestFileSize $largestFilePath
Largest Folder: $largestFolderSize $($TreeStats.LargestFolder)
 
"@

        }
        
        [void]$OutputBuilder.Replace($placeholderText, $statsContent)
    }else {
        Write-Host ""
        Write-Host $headerLine -ForegroundColor Cyan
        Write-Host $underscoreLine -ForegroundColor DarkCyan
        Write-Host $valuesLine
        
        if ($DisplaySize) {
            Write-Host ""
            Write-Host "Largest File:" -NoNewline -ForegroundColor Cyan
            Write-Host " $largestFileSize $largestFilePath"
            
            Write-Host "Largest Folder:" -NoNewline -ForegroundColor Cyan
            Write-Host " $largestFolderSize $($TreeStats.LargestFolder)"
        }
    }
}