# PowerShell script to add ConfigureAwait(false) to all await statements in Infrastructure and Application layers
# This improves performance and avoids potential deadlocks

$projectRoot = "c:\Users\yaoji\git\ColaCoder\product-master\colaflow-api"
$paths = @(
    "$projectRoot\src\Modules\Identity\ColaFlow.Modules.Identity.Infrastructure",
    "$projectRoot\src\Modules\Identity\ColaFlow.Modules.Identity.Application"
)

$filesUpdated = 0
$awaitStatementsUpdated = 0

foreach ($basePath in $paths) {
    Write-Host "Processing path: $basePath" -ForegroundColor Cyan

    $files = Get-ChildItem -Path $basePath -Recurse -Filter "*.cs" |
        Where-Object { $_.FullName -notmatch "\\bin\\" -and $_.FullName -notmatch "\\obj\\" -and $_.FullName -notmatch "Migrations" }

    foreach ($file in $files) {
        $content = Get-Content $file.FullName -Raw
        $originalContent = $content

        # Pattern 1: await ... ; (without ConfigureAwait)
        # Matches: await SomeMethodAsync(); but not: await SomeMethodAsync().ConfigureAwait(false);
        $pattern1 = '(\s+await\s+[^;\r\n]+?)(\s*;)'

        # Check if file has await statements that don't already have ConfigureAwait
        if ($content -match 'await\s+' -and $content -notmatch '\.ConfigureAwait\(') {
            # Replace await statements with ConfigureAwait(false)
            $newContent = $content -replace $pattern1, '$1.ConfigureAwait(false)$2'

            # Only write if content changed
            if ($newContent -ne $originalContent) {
                # Count how many await statements were updated
                $matches = ([regex]::Matches($originalContent, 'await\s+')).Count
                $awaitStatementsUpdated += $matches

                Set-Content -Path $file.FullName -Value $newContent -NoNewline
                $filesUpdated++
                Write-Host "  Updated: $($file.Name) ($matches await statements)" -ForegroundColor Green
            }
        }
    }
}

Write-Host "`nSummary:" -ForegroundColor Yellow
Write-Host "  Files updated: $filesUpdated" -ForegroundColor Green
Write-Host "  Await statements updated: ~$awaitStatementsUpdated" -ForegroundColor Green
Write-Host "`nNote: Please review changes and rebuild to ensure correctness." -ForegroundColor Yellow
