Modules/IdLE.Core/Private/Get-IdleAvailableCapabilities.ps1

Set-StrictMode -Version Latest

function Get-IdleAvailableCapabilities {
    <#
    .SYNOPSIS
    Aggregates capabilities from all providers.

    .DESCRIPTION
    Collects capabilities from all provider instances and returns a unique sorted list.
    Uses the simpler nested helper version of Get-IdleProviderCapabilities that directly
    calls GetCapabilities() without inference logic.
    #>

    [CmdletBinding()]
    param(
        [Parameter()]
        [AllowNull()]
        [object] $Providers
    )

    function Get-ProviderCapabilitiesSimple {
        <#
        .SYNOPSIS
        Gets the capability list advertised by a provider (simplified version).

        .DESCRIPTION
        Providers are expected to expose a GetCapabilities() method.
        If not present, the provider is treated as advertising no capabilities.
        This is the planning-time version without inference logic.
        #>

        [CmdletBinding()]
        param(
            [Parameter()]
            [AllowNull()]
            [object] $Provider
        )

        if ($null -eq $Provider) {
            return @()
        }

        if ($Provider.PSObject.Methods.Name -contains 'GetCapabilities') {
            $caps = $Provider.GetCapabilities()
            if ($null -eq $caps) {
                return @()
            }
            return @(
                $caps |
                Where-Object { $null -ne $_ } |
                ForEach-Object {
                    $rawCap = ([string]$_).Trim()
                    if (-not [string]::IsNullOrWhiteSpace($rawCap)) {
                        ConvertTo-IdleNormalizedCapability -Capability $rawCap
                    }
                } |
                Where-Object { -not [string]::IsNullOrWhiteSpace($_) } |
                Sort-Object -Unique
            )
        }

        return @()
    }

    $providerInstances = @(Get-IdleProvidersFromMap -Providers $Providers)

    $caps = @()
    foreach ($p in $providerInstances) {
        $caps += @(Get-ProviderCapabilitiesSimple -Provider $p)
    }

    return @($caps | Sort-Object -Unique)
}