# SPDX-FileCopyrightText: 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later

$ErrorActionPreference = "Stop"

# Check if running as administrator
if (-not ([bool](net session 2>$null))) {
    Write-Host "This script must be run with administrator privileges!"
    Exit 1
}

$VSVer = "17"
$ExeFile = "vs_community.exe"
$Uri = "https://aka.ms/vs/$VSVer/release/$ExeFile"
$Destination = "./$ExeFile"

Write-Host "Downloading Visual Studio Build Tools from $Uri"
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile($Uri, $Destination)
Write-Host "Finished downloading $ExeFile"

$Arguments = @(
    "--quiet",                                                  # Suppress installer UI
    "--wait",                                                   # Wait for installation to complete
    "--norestart",                                              # Prevent automatic restart
    "--force",                                                  # Force installation even if components are already installed
    "--add Microsoft.VisualStudio.Workload.NativeDesktop",      # Desktop development with C++
    "--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64",  # Core C++ compiler/tools for x86/x64
    "--add Microsoft.VisualStudio.Component.Windows11SDK.26100",# Windows 11 SDK (26100)
    "--add Microsoft.VisualStudio.Component.Windows10SDK.19041",# Windows 10 SDK (19041)
    "--add Microsoft.VisualStudio.Component.VC.Llvm.Clang",     # LLVM Clang compiler
    "--add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset", # LLVM Clang integration toolset
    "--add Microsoft.VisualStudio.Component.Windows11SDK.22621",# Windows 11 SDK (22621)
    "--add Microsoft.VisualStudio.Component.VC.CMake.Project",  # CMake project support
    "--add Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64", # VC++ 14.2 toolset
    "--add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang" # LLVM Clang for native desktop
)

Write-Host "Installing Visual Studio Build Tools"
$InstallProcess = Start-Process -FilePath $Destination -NoNewWindow -PassThru -ArgumentList $Arguments

# Spinner while installing
$Spinner = "|/-\"
$i = 0
while (-not $InstallProcess.HasExited) {
    Write-Host -NoNewline ("`rInstalling... " + $Spinner[$i % $Spinner.Length])
    Start-Sleep -Milliseconds 250
    $i++
}

# Clear spinner line
Write-Host "`rSetup completed!           "

$ExitCode = $InstallProcess.ExitCode
if ($ExitCode -ne 0) {
    Write-Host "Error installing Visual Studio Build Tools (Error: $ExitCode)"
    Exit $ExitCode
}

Write-Host "Finished installing Visual Studio Build Tools"
