param(
    $Action,
    [hashtable] $Arguments
)

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

& {
    param($Parameters)
    . "$PSScriptRoot/../../Scripts/Restoration.ps1";
    Export-ModuleMember -Function @();

    $getInstallPath = {
        return "$((Get-KnownFolder -SpecialFolder ProgramFilesX86).Path)/osu!";
    }

    Start-SoftwareInstaller @Parameters `
        -Installer {
            Install-ChocoPackage osu;
            Remove-DesktopIcon "*osu*";
        } `
        -Backup {
            Add-BackupArtifacts -Source (& $getInstallPath) -Path "osu!" `
                -Include @(
                    "Screenshots",
                    "Skins",
                    "Songs",
                    "osu!.cfg",
                    "scores.db"
                );
        } `
        -Configurator {
            Expand-BackupArtifacts -Path "osu!" -Target (& $getInstallPath);
        } `
        -UserBackup {
            param([hashtable] $Arguments)
            $name = $Arguments.Name;
            Add-BackupArtifacts -Source "$(& $getInstallPath)/osu!.$name.cfg" -User $name -Path "osu!/osu!.cfg";
        } `
        -UserConfigurator {
            param([hashtable] $Arguments)
            $name = $Arguments.Name;
            Expand-BackupArtifacts -User $name -Path "osu!/osu!.cfg" -Target "$(& $getInstallPath)/osu!.$name.cfg";
        };
} $PSBoundParameters;