. "$PSScriptRoot/../../lib/Restoration.ps1";
. "$PSScriptRoot/../../../lib/Software.ps1";

<#
    .SYNOPSIS
    Generates the components for installing a TrackMania Forever game.

    .PARAMETER Installer
    The script to execute for installing the game.

    .PARAMETER UserDirectory
    The directory containing the user data.
#>
function Get-TMForeverInstallerComponents {
    param(
        [string] $IconName,
        [string] $UserDirectory,
        [scriptblock] $Installer
    )

    @{
        context          = @{
            iconName      = $IconName;
            userDirectory = $UserDirectory;
            installer     = $Installer;
        };
        installer        = {
            param([hashtable] $Context)
            $iconName = $Context.IconName;

            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;
                }
            }

            & $Context.Installer;
            Remove-DesktopIcon "*$iconName*";
        };
        userBackup       = {
            param(
                [string] $Name,
                [hashtable] $Context
            )

            Add-BackupArtifacts -User $Context.Name -Source $Context.UserDirectory -Path "$Name" `
                -Include @(
                    "ChallengeMusics",
                    "MediaTracker",
                    "MenuMusics",
                    "Painter",
                    "Scores",
                    "Skins",
                    "Tracks"
                );
        };
        userConfigurator = {
            param(
                [string] $Name,
                [hashtable] $Context
            )

            $user = $Context.Name;
            Expand-BackupArtifacts -User $user -Path "$Name" -Target $path;
        };
    };
}