AzurePolicyWatch.psm1

# AzurePolicyWatch Module Loader
# Azure Policy compliance comparison module - Loads all Private and Public functions

# Module-scoped caches (persistent across function calls)
$script:PolicyDefinitionCache = @{}
$script:PolicySetCache = @{}

# Import Utils functions
Get-ChildItem "$PSScriptRoot/Private/Utils/*.ps1" | ForEach-Object { 
    . $_.FullName 
    Write-Verbose "Loaded Utils function: $($_.BaseName)"
}

# Import Azure functions
Get-ChildItem "$PSScriptRoot/Private/Azure/*.ps1" | ForEach-Object { 
    . $_.FullName 
    Write-Verbose "Loaded Azure function: $($_.BaseName)"
}

# Import Baseline functions
Get-ChildItem "$PSScriptRoot/Private/Baseline/*.ps1" | ForEach-Object { 
    . $_.FullName 
    Write-Verbose "Loaded Baseline function: $($_.BaseName)"
}

# Import Scanning functions
Get-ChildItem "$PSScriptRoot/Private/Scanning/*.ps1" | ForEach-Object { 
    . $_.FullName 
    Write-Verbose "Loaded Scanning function: $($_.BaseName)"
}

# Import Comparison functions
Get-ChildItem "$PSScriptRoot/Private/Comparison/*.ps1" | ForEach-Object { 
    . $_.FullName 
    Write-Verbose "Loaded Comparison function: $($_.BaseName)"
}

# Import Export functions
Get-ChildItem "$PSScriptRoot/Private/Export/*.ps1" | ForEach-Object { 
    . $_.FullName 
    Write-Verbose "Loaded Export function: $($_.BaseName)"
}

# Import Public functions (Week 4)
Get-ChildItem "$PSScriptRoot/Public/*.ps1" | ForEach-Object { 
    . $_.FullName 
    Write-Verbose "Loaded Public function: $($_.BaseName)"
}

# Export Public functions only
Export-ModuleMember -Function @(
    'Get-AzPolicyBaseline',
    'Get-AzPolicyAssignmentScan',
    'Compare-AzPolicyCompliance',
    'Export-PolicyReport',
    'Invoke-AzPolicyWatch'
)