Param([String]$tag, [Int]$num = 1, [switch]$log, [string]$kind = "potato")
Import-Module .\lib\Voicemeeter.psm1

Function ParseLog {
    Param([String]$logfile)
    $summary_file = Join-Path $PSScriptRoot "_summary.log"
    if (Test-Path $summary_file) { Clear-Content $summary_file }

    $PASSED_PATTERN = "^PassedCount\s+:\s(\d+)"
    $FAILED_PATTERN = "^FailedCount\s+:\s(\d+)"

    $DATA = @{
        "passed" = 0
        "failed" = 0
    }

    ForEach ($line in `
        $(Get-Content -Path "${logfile}")) {
        if ($line -match $PASSED_PATTERN) {
            $DATA["passed"] += $Matches[1]
        }
        elseif ($line -match $FAILED_PATTERN) {
            $DATA["failed"] += $Matches[1]
        }
    }

    "=========================`n" + `
        "$num tests run:`n" + `
        "=========================" | Tee-Object -FilePath $summary_file -Append
    $DATA | ForEach-Object { $_ } | Tee-Object -FilePath $summary_file -Append
}


function main() {
    try {
        $vmr = Connect-Voicemeeter -Kind $kind
        $vmr.command.RunMacrobuttons()  # ensure macrobuttons is running before we begin
        Write-Host "Running tests for $vmr"

        # test boundaries by kind
        $phys_in = $vmr.kind.p_in - 1
        $virt_in = $vmr.kind.p_in + $vmr.kind.v_in - 1
        $phys_out = $vmr.kind.p_out - 1
        $virt_out = $vmr.kind.p_out + $vmr.kind.v_out - 1
        $vban_in = $vmr.kind.vban_in - 1
        $vban_out = $vmr.kind.vban_out - 1

        # skip conditions by kind
        $ifBasic = $vmr.kind.name -eq "basic"
        $ifBanana = $vmr.kind.name -eq "banana"
        $ifPotato = $vmr.kind.name -eq "potato"
        $ifNotBasic = $vmr.kind.name -ne "basic"
        $ifNotBanana = $vmr.kind.name -ne "banana"
        $ifNotPotato = $vmr.kind.name -ne "potato"

        $logfile = Join-Path $PSScriptRoot "_results.log"
        if (Test-Path $logfile) { Clear-Content $logfile }

        1..$num | ForEach-Object {
            if ($log) { 
                "Running test $_ of $num" | Tee-Object -FilePath $logfile -Append
                Invoke-Pester -Tag $tag -PassThru | Tee-Object -FilePath $logfile -Append
            }
            else { 
                "Running test $_ of $num"
                Invoke-Pester -Tag $tag -PassThru
            }
        }

        if ($log) { Parselog -logfile $logfile }
    }
    finally { Disconnect-Voicemeeter }   
}


main