. "$PSScriptRoot/../Scripts/Context.ps1";

function Invoke-Upgrade([Context] $context)
{
    Write-Host "Upgrading Windows";
    Write-Host "Preparing for Windows Update";
    $null = Import-Module PSWindowsUpdate;

    Write-Host "Performing Windows Update";
    $null = Install-WindowsUpdate -AcceptAll -IgnoreReboot;

    if ((Get-WURebootStatus -Silent))
    {
        Write-Information "A Reboot is Required!";
        Write-Information "Windows will reboot now and the installation will be continued automatically.";
        $context.Reboot();
        exit;
    }
    elseif ((Get-WindowsUpdate -IgnoreReboot).Count -gt 0)
    {
        Write-Information "More updates are available. Restarting upgrade routine.";
        $null = Invoke-Upgrade $context;
        return;
    }
    else
    {
        Write-Information "Upgrading Windows finished successfully!";
        return;
    }
}