# PostToolUse hook - Auto-format files after editing
# Place in: .claude\hooks\auto-format.ps1
# Register in: .claude\settings.json (with -ExecutionPolicy Bypass)

$inputJson = [Console]::In.ReadToEnd() | ConvertFrom-Json
$tool = $inputJson.tool_name

# Only run after Write or Edit operations
if ($tool -eq "Write" -or $tool -eq "Edit") {
    $file = $inputJson.tool_input.file_path
    if (-not $file) {
        $file = $inputJson.tool_input.path
    }

    if (-not $file -or $file -eq "null") {
        exit 0
    }

    # Get file extension
    $ext = [System.IO.Path]::GetExtension($file).TrimStart('.')

    switch ($ext) {
        { $_ -in @("js", "jsx", "ts", "tsx", "json", "css", "scss", "md", "html", "vue") } {
            # Format with Prettier if available
            if (Test-Path "node_modules\.bin\prettier.cmd") {
                & npx prettier --write $file 2>$null
            }
        }
        "py" {
            # Format with Black if available
            if (Get-Command black -ErrorAction SilentlyContinue) {
                & black $file 2>$null
            }
        }
        "go" {
            # Format with gofmt
            if (Get-Command gofmt -ErrorAction SilentlyContinue) {
                & gofmt -w $file 2>$null
            }
        }
        "rs" {
            # Format with rustfmt
            if (Get-Command rustfmt -ErrorAction SilentlyContinue) {
                & rustfmt $file 2>$null
            }
        }
    }
}

exit 0
