Functions/GenXdev.Coding.PowerShell.Modules/Show-RefactorReport.ps1

###############################################################################
<#
.SYNOPSIS
Displays a formatted report of refactoring information for specified modules.
 
.DESCRIPTION
Shows a table containing refactoring status and metrics for PowerShell modules
matching the specified name pattern. The report includes details like name,
prompt key, status, function count, priority and completion percentage.
 
.PARAMETER Name
One or more module name patterns to filter the report. Supports wildcards.
If omitted, shows all modules.
 
.EXAMPLE
Show-RefactorReport -Name "GenXdev.*"
Shows refactoring status for all GenXdev modules.
 
.EXAMPLE
refactors *
Shows refactoring status for all modules using the alias.
#>

function Show-RefactorReport {

    [CmdletBinding()]
    [Alias('refactors')]
    param(
        ########################################################################
        [Parameter(
            Position = 0,
            Mandatory = $false,
            HelpMessage = 'The name pattern to filter modules (supports wildcards)'
        )]
        [SupportsWildcards()]
        [string[]]$Name = '*',
        ###############################################################################
        [Alias('DatabasePath')]
        [Parameter(
            Mandatory = $false,
            HelpMessage = 'Specifies the path to the preferences database file.'
        )]
        [string]$PreferencesDatabasePath,
        ###############################################################################
        [Parameter(
            Mandatory = $false,
            HelpMessage = 'Use only the current session for refactor state.'
        )]
        [switch]$SessionOnly,
        ###############################################################################
        [Parameter(
            Mandatory = $false,
            HelpMessage = 'Clear the current session refactor state.'
        )]
        [switch]$ClearSession,
        ###############################################################################
        [Alias('FromPreferences')]
        [Parameter(
            Mandatory = $false,
            HelpMessage = 'Skip loading or saving session state.'
        )]
        [switch]$SkipSession,
        ###############################################################################
        [Parameter(
            Mandatory = $false,
            HelpMessage = 'Return the report as plain text instead of formatted output.'
        )]
        [switch]$AsText,
        ########################################################################
        [switch] $Full
    )

    begin {

        # output detailed module filter pattern for troubleshooting
        Microsoft.PowerShell.Utility\Write-Verbose ('Generating refactor report for modules matching: ' +
            "$($Name -join ', ')")
    }


    process {

        # retrieve report data and format as table with key metrics
        $report = GenXdev.Coding\Get-RefactorReport -Name:$Name |
            Microsoft.PowerShell.Core\ForEach-Object {

                $reportObj = $_
                $refactor = GenXdev.Coding\Get-Refactor -Name:$_.Name

                if ($Full) {

                    @{
                        Name      = $reportObj.Name
                        PromptKey = $reportObj.PromptKey
                        P         = $reportObj.Priority
                        Fc        = $reportObj.FunctionCount
                        C         = "$($reportObj.PercentageComplete)%"
                        UsC       = $refactor.State.UnSelected.Count
                        UsI       = $refactor.State.UnSelectedIndex
                        SlC       = $refactor.State.Selected.Count
                        SlI       = $refactor.State.SelectedIndex
                        RfC       = $refactor.State.Refactored.Count
                        RfI       = $refactor.State.RefactoredIndex
                    }

                    return;
                }
                @{
                    Name          = $reportObj.Name
                    PromptKey     = $reportObj.PromptKey
                    Priority      = $reportObj.Priority
                    Status        = $reportObj.Status
                    FunctionCount = $reportObj.FunctionCount
                    Complete      = "$($reportObj.PercentageComplete)%"
                }
            } | Microsoft.PowerShell.Utility\ConvertTo-Json -Compress | Microsoft.PowerShell.Utility\ConvertFrom-Json | Microsoft.PowerShell.Utility\Format-Table -AutoSize | Microsoft.PowerShell.Utility\Out-String

        $i = 0;
        $report | Microsoft.PowerShell.Core\ForEach-Object {

            if ($i++ -eq 0) {

                Microsoft.PowerShell.Utility\Write-Host -ForegroundColor Green -Object $PSItem
            }
            else {

                Microsoft.PowerShell.Utility\Write-Host -Object $PSItem
            }
        }
    }

    end {
    }
}