param(
    $Action,
    [hashtable] $Arguments
)

& {
    param($parameters)

    . "$PSScriptRoot/../../../Common/Scripts/BrowserAutomation.ps1";
    . "$PSScriptRoot/../../../Common/Scripts/Software.ps1";
    . "$PSScriptRoot/../../../Common/Scripts/System.ps1";

    [System.Tuple[string, string, string][]] $versions = @(
        [System.Tuple]::Create("visualstudio2019enterprise", "VisualStudio.16.Release", "Microsoft.VisualStudio.Product.Enterprise"),
        [System.Tuple]::Create("visualstudio2019community", "VisualStudio.16.Release", "Microsoft.VisualStudio.Product.Community"),
        [System.Tuple]::Create("visualstudio2022enterprise", "VisualStudio.17.Release", "Microsoft.VisualStudio.Product.Enterprise"),
        [System.Tuple]::Create("visualstudio2022community", "VisualStudio.17.Release", "Microsoft.VisualStudio.Product.Community")
    );

    Start-SoftwareInstaller @parameters `
        -Installer {
            foreach ($version in $versions) {
                $packageName = $version[0];
                Write-Host "Installing ``$packageName``…";
                Install-ChocoPackage $packageName;
            }

            Remove-DesktopIcon "CocosCreator*";
            Remove-DesktopIcon "Unity Hub*";
        };

    # ToDo: Add restoration
    # Only restore version if it has been backed up
} $PSBoundParameters;