functions/Get-XdrEndpointConfigurationAdvancedFeatures.ps1

function Get-XdrEndpointConfigurationAdvancedFeatures {
    <#
    .SYNOPSIS
        Retrieves the advanced features configuration settings for Microsoft Defender for Endpoint.
    
    .DESCRIPTION
        Gets the raw advanced features settings from the Microsoft Defender XDR portal.
        This function includes caching support with a 30-minute TTL to reduce API calls.
    
    .PARAMETER Force
        Bypasses the cache and forces a fresh retrieval from the API.
    
    .EXAMPLE
        Get-XdrEndpointConfigurationAdvancedFeatures
        Retrieves the advanced features configuration using cached data if available.
    
    .EXAMPLE
        Get-XdrEndpointConfigurationAdvancedFeatures -Force
        Forces a fresh retrieval of the advanced features configuration, bypassing the cache.
    
    .OUTPUTS
        Object
        Returns the API response.
    #>

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Advanced Features is plural by design')]
    [CmdletBinding()]
    param (
        [Parameter()]
        [switch]$Force
    )

    begin {
        Update-XdrConnectionSettings
    }
    
    process {
        $currentCacheValue = Get-XdrCache -CacheKey "GetXdrEndpointConfigurationAdvancedFeatures" -ErrorAction SilentlyContinue
        if (-not $Force -and $currentCacheValue.NotValidAfter -gt (Get-Date)) {
            Write-Verbose "Using cached GetXdrEndpointConfigurationAdvancedFeatures data"
            return $currentCacheValue.Value
        } elseif ($Force) {
            Write-Verbose "Force parameter specified, bypassing cache"
            Clear-XdrCache -CacheKey "GetXdrEndpointConfigurationAdvancedFeatures"
        } else {
            Write-Verbose "GetXdrEndpointConfigurationAdvancedFeatures cache is missing or expired"
        }

        $Uri = "https://security.microsoft.com/apiproxy/mtp/settings/GetAdvancedFeaturesSetting"
        Write-Verbose "Retrieving GetXdrEndpointConfigurationAdvancedFeatures data"
        try {
            $result = Invoke-RestMethod -Uri $Uri -Method Get -ContentType "application/json" -WebSession $script:session -Headers $script:headers
            Set-XdrCache -CacheKey "GetXdrEndpointConfigurationAdvancedFeatures" -Value $result -TTLMinutes 30
            return $result
        } catch {
            Write-Error "Failed to retrieve endpoint advanced features configuration: $_"
        }
    }
    
    end {
    }
}