SPClean.psm1

#Requires -Version 7.0
<#
.MODULE
    SPClean
.VERSION
    2.0.0
.RELEASENOTES
    2.0.0 - 2026-08-15:
    - Major Feature: SharePoint Online Storage Optimization & Digital Waste Management.
    - New Scan Cmdlets: Get-SPCStorageWaste, Get-SPCInactiveSite, Get-SPCVersionWaste, Get-SPCPreservationHoldWaste.
    - New Remediation Cmdlets: Clear-SPCRecycleBin, Optimize-SPCFileVersion.
    - New Reporting Cmdlet: Export-SPCStorageReport (Interactive HTML ROI Dashboard + CSV Audit).
    - Architecture: Decoupled PnPWrappers layer, PnP 3.2.0 compatibility, BSTR unmanaged memory zeroing.
#>


# Module-scoped connection state — set by Connect-SPCTenant, cleared by Disconnect-SPCTenant
$script:SPCContext = $null

$wrapperFile  = Join-Path -Path $PSScriptRoot -ChildPath 'Private\PnPWrappers.ps1'
if (Test-Path -Path $wrapperFile) {
    . $wrapperFile
}

$privateFiles = Get-ChildItem -Path "$PSScriptRoot\Private\*.ps1" -Exclude 'PnPWrappers.ps1' -ErrorAction SilentlyContinue
$publicFiles  = Get-ChildItem -Path "$PSScriptRoot\Public\**\*.ps1" -Recurse -ErrorAction SilentlyContinue

foreach ($file in $privateFiles) {
    . $file.FullName
}

foreach ($file in $publicFiles) {
    . $file.FullName
}

# Register aliases for backward compatibility
Set-Alias -Name 'Invoke-SPCDashboardReportV1' -Value 'Invoke-SPCDashboardReport' -Description 'Deprecated: Use Invoke-SPCDashboardReport instead.'
Set-Alias -Name 'Invoke-SPCPermissionAnalyticsV2' -Value 'Invoke-SPCPermissionAnalytics' -Description 'Deprecated: Use Invoke-SPCPermissionAnalytics instead.'

Export-ModuleMember -Function (
    'Connect-SPCTenant',
    'Disconnect-SPCTenant',
    'Get-SPCOrphanedUser',
    'Export-SPCReport',
    'Remove-SPCOrphanedUser',
    'Restore-SPCOrphanedUser',
    'New-SPCScanSchedule',
    'Register-SPCLicense',
    'Get-SPCLicenseInfo',
    'Get-SPCMismatchUser',
    'Repair-SPCMismatchUser',
    'Get-SPCGuestAccess',
    'Get-SPCPrivilegedUser',
    'Get-SPCOverPermissionedUser',
    'Get-SPCPermissionHealthScore',
    'Get-SPCBrokenInheritance',
    'Compare-SPCPermissionSnapshot',
    'Invoke-SPCDashboardReport',
    'Invoke-SPCPermissionAnalytics',
    'Get-SPCStorageWaste',
    'Get-SPCInactiveSite',
    'Get-SPCVersionWaste',
    'Get-SPCPreservationHoldWaste',
    'Clear-SPCRecycleBin',
    'Optimize-SPCFileVersion',
    'Export-SPCStorageReport'
) -Alias (
    'Invoke-SPCDashboardReportV1',
    'Invoke-SPCPermissionAnalyticsV2'
)