param(
    $Action,
    [hashtable] $Arguments
)


& {
    param($Parameters)
    . "$PSScriptRoot/../../Scripts/Restoration.ps1";
    . "$PSScriptRoot/../../../Common/Scripts/Software.ps1";
    . "$PSScriptRoot/../../../Common/Scripts/System.ps1";
    $path = "$HOME/Documents/TrackMania";

    Start-SoftwareInstaller @Parameters `
        -Installer {
            $file = "TmUnitedForever.exe";
            $dir = New-TemporaryDirectory;

            foreach ($feature in @("DirectPlay", "NetFx3")) {
                if ((Get-WindowsOptionalFeature -Online -FeatureName $feature).State -ne "Enabled") {
                    Write-Information "Enabling the ``$feature`` feature…";
                    choco install --source windowsFeatures -y $feature;
                }
            }

            $null = Push-Location $dir;
            Write-Host "Downloading TrackMania United Forever…";
            Invoke-WebRequest "http://files.trackmaniaforever.com/tmunitedforever_setup.exe" -OutFile "$file";

            Write-Host "Starting installation…";
            Start-Process -Wait -FilePath $file -ArgumentList "/Silent";
            Remove-DesktopIcon "*TmUnitedForever*";
            $null = Pop-Location;

            Remove-Item -Recurse $dir;
        } `
        -UserBackup {
            param([hashtable] $Arguments)
            Add-BackupArtifacts -User $Arguments.Name -Source $path -Path "TmUnitedForever" `
                -Include @(
                    "ChallengeMusics",
                    "MediaTracker",
                    "MenuMusics",
                    "Scores",
                    "Skins",
                    "Tracks"
                );
        } `
        -UserConfigurator {
            param([hashtable] $Arguments)
            Expand-BackupArtifacts -User $Arguments.Name -Path "TmUnitedForever" -Target $path;
        };
} $PSBoundParameters;