Private/Export/Export-SummaryCsv.ps1

function Export-SummaryCsv {
    <#
    .SYNOPSIS
    Exports the comparison summary to CSV file.
     
    .DESCRIPTION
    Exports the summary of all assignment comparisons to a CSV file named
    Baseline_Compare_Summary.csv.
     
    Includes metrics for each assignment: DisplayName, Name, Scope,
    TotalPolicies, InCommon, Extra, VersionDiffs, etc.
     
    ✅ OPTIMIZED VERSION - Deduplicates entries before export to prevent
    duplicate rows for the same assignment.
     
    .PARAMETER Summary
    Array of summary objects from New-ComparisonSummary.
     
    .PARAMETER OutputPath
    Full path to the output CSV file.
     
    .EXAMPLE
    Export-SummaryCsv -Summary $summary -OutputPath "C:\Reports\Baseline_Compare_Summary.csv"
     
    Exports summary to specified CSV file.
     
    .OUTPUTS
    None. Writes CSV file to disk.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [object[]]$Summary,
        
        [Parameter(Mandatory)]
        [string]$OutputPath
    )
    
    try {
        # ========== ✅ DÉDUPLICATION DU SUMMARY ==========
        Write-Verbose "Checking for duplicate assignments in Summary before CSV export..."
        
        $summaryBeforeDedup = $Summary.Count
        
        # Grouper par AssignmentName pour détecter les duplicatas
        $groupedSummary = $Summary | Group-Object AssignmentName
        
        # Vérifier s'il y a des duplicatas
        $duplicates = $groupedSummary | Where-Object { $_.Count -gt 1 }
        
        if ($duplicates) {
            Write-Warning "⚠️ Duplicate assignments detected in Summary (will be deduplicated):"
            foreach ($dup in $duplicates) {
                Write-Warning " - Assignment '$($dup.Name)' appears $($dup.Count) times"
            }
            
            # Dédupliquer : garder la première entrée de chaque groupe
            $uniqueSummary = $groupedSummary | ForEach-Object {
                $_.Group | Select-Object -First 1
            }
            
            Write-Verbose "✅ Summary deduplicated for CSV export: $summaryBeforeDedup → $($uniqueSummary.Count) entries"
            Write-Verbose " Removed $($summaryBeforeDedup - $uniqueSummary.Count) duplicate entries"
        }
        else {
            Write-Verbose "✅ No duplicates in Summary (all $($Summary.Count) assignments are unique)"
            $uniqueSummary = $Summary
        }
        
        # Export le Summary dédupliqué
        $uniqueSummary | Sort-Object AssignmentDisplayName | 
            Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8
        
        Write-Host (" ✅ Summary exported: {0}" -f (Split-Path $OutputPath -Leaf)) -ForegroundColor Green
        
        if ($duplicates) {
            Write-Host (" ℹ️ Deduplicated: $summaryBeforeDedup → $($uniqueSummary.Count) rows") -ForegroundColor Yellow
        }
    }
    catch {
        Write-Warning "Failed to export summary CSV: $($_.Exception.Message)"
    }
}