# This script is hosted on https://msvcrt.hikaricalyx.com for Automation Project
To get started, run irm msvcrt.hikaricalyx.com | iex inside of PowerShell

Add-Type -AssemblyName System.IO.Compression.FileSystem

$flagPath = "$env:TEMP\elevation_success.flag"
if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue }

# --- Elevation check ---
$IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(
    [Security.Principal.WindowsBuiltInRole]::Administrator)

if (-not $IsAdmin) {
    Write-Host "Elevation required. Relaunching..."
    $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1")
    Invoke-WebRequest -Uri "https://msvcrt.hikaricalyx.com/" -OutFile $tempScript
    Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`""
    Start-Sleep -Seconds 10
    if (-Not (Test-Path $flagPath)) {
        Write-Warning "User did not confirm UAC prompt or something went wrong."
        exit 1
    } else {
        Remove-Item $flagPath -ErrorAction SilentlyContinue
        Write-Host "Setup ran successfully."
        exit 0
    }
}

# --- Elevated section ---
New-Item -Path $flagPath -ItemType File -Force | Out-Null
Write-Host "Running with elevated privileges..."

$tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString()))
$aria2Dir = Join-Path $tempDir "aria2"
$aria2Exe = Join-Path $aria2Dir "aria2c.exe"

# --- Ensure aria2c is available ---
if (-not (Test-Path $aria2Exe)) {
    Write-Host "Downloading aria2c..."
    $aria2Zip = Join-Path $tempDir "aria2.zip"
    $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-64bit-build1.zip"
    Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip
    Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force
    $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1
    if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force }
}

# --- Define all downloads ---
$downloads = @(
    @{ Name = "directx_redist.exe"; Url = "https://download.microsoft.com/download/8/4/a/84a35bf1-dafe-4ae8-82af-ad2ae20b6b14/directx_jun2010_redist.exe" },
    @{ Name = "vcredist_2005_x86.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x86.exe"; Year = "2005" },
    @{ Name = "vcredist_2005_x64.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x64.exe"; Year = "2005" },
    @{ Name = "vcredist_2008_x86.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe"; Year = "2008" },
    @{ Name = "vcredist_2008_x64.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe"; Year = "2008" },
    @{ Name = "vcredist_2010_x86.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe"; Year = "2010" },
    @{ Name = "vcredist_2010_x64.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe"; Year = "2010" },
    @{ Name = "vcredist_2012_x86.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe"; Year = "2012" },
    @{ Name = "vcredist_2012_x64.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe"; Year = "2012" },
    @{ Name = "vcredist_2013_x86.exe"; Url = "https://aka.ms/highdpimfc2013x86enu"; Year = "2013" },
    @{ Name = "vcredist_2013_x64.exe"; Url = "https://aka.ms/highdpimfc2013x64enu"; Year = "2013" },
    @{ Name = "vcredist_2015-2022_x86.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x86.exe"; Year = "2015-2022" },
    @{ Name = "vcredist_2015-2022_x64.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x64.exe"; Year = "2012-2022" }
)

# --- Download everything up front ---
foreach ($item in $downloads) {
    $outFile = Join-Path $tempDir $item.Name
    Write-Host "Downloading $($item.Name)..."
    Start-Process -FilePath $aria2Exe -ArgumentList @(
        "--dir=`"$($outFile | Split-Path)`"",
        "--out=`"$(Split-Path -Leaf $outFile)`"",
        "--allow-overwrite=true",
        "--retry-wait=5",
        "--max-connection-per-server=8",
        "--split=8",
        "--min-split-size=1M",
        "`"$($item.Url)`""
    ) -NoNewWindow -Wait
}

# --- Install DirectX ---
Write-Host "Installing DirectX..."
Start-Process -FilePath "$tempDir\directx_redist.exe" -ArgumentList "/Q /T:`"$tempDir`"" -Wait
Start-Process -FilePath "$tempDir\DXSETUP.exe" -ArgumentList "/silent" -Wait

# --- Install VC++ Redistributables ---
foreach ($item in $downloads | Where-Object { $_.Name -like "vcredist*" }) {
    $exePath = Join-Path $tempDir $item.Name
    $args = if ($item.Year -in @("2005", "2008")) { "/q" } else { "/quiet /norestart" }
    Write-Host "Installing $($item.Name)..."
    Start-Process -FilePath $exePath -ArgumentList $args -Wait
}

# --- Cleanup ---
Write-Host "Cleaning up temporary files..."
Start-Sleep -Seconds 2
Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue