[string] $format = $false

foreach ( $arg in $args )
{
	if ( $arg -eq "format" )
	{
		$format = $true
	}
}

[string[]] $include = 'gen.*.hpp', 'gen.*.cpp', 'gen.hpp', 'gen.cpp'
[string[]] $exclude

$path_root               = git rev-parse --show-toplevel
$path_project            = Join-Path $path_root project
$path_scripts            = Join-Path $path_root scripts
$path_singlheader        = Join-Path $path_root singleheader
$path_singleheader_comp  = Join-Path $path_singlheader components

$file_spec = Join-Path $path_scripts gencpp.refactor

# Gather the files to be formatted.
$targetFiles = @()
$targetFiles += Get-ChildItem -Recurse -Path $path_project           -Include $include -Exclude $exclude | Select-Object -ExpandProperty FullName
$targetFiles += Get-ChildItem -Recurse -Path $path_singleheader_comp -Include $include -Exclude $exclude | Select-Object -ExpandProperty FullName

# Format the files.
$formatParams = @(
    '-i'                          # In-place
    '-style=file:./.clang-format' # Search for a .clang-format file in the parent directory of the source file.
    '-verbose'
)

write-host "Beginning refactor...`n"

$refactorParams = @(
    # "-debug",
    "-num=$($targetFiles.Count)"
    "-src=$($targetFiles)",
    "-spec=$($file_spec)"
)

& refactor $refactorParams

Write-Host "`nRefactoring complete`n`n"

if ( $format -eq $true ) {
	Write-Host "Beginning format...`n"

	& clang-format $formatParams $targetFiles

	Write-Host "`nFormatting complete"
}