@echo off
setlocal

:: Create temp ps1 script
set "PS_SCRIPT=%TEMP%\lv-bootstrap.ps1"

(
echo [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
echo $ErrorActionPreference = 'Stop'
echo Write-Host ''
echo Write-Host '  Legion Voice' -ForegroundColor Cyan
echo Write-Host ''
echo $dir = Split-Path -Parent '%~f0'
echo $files = @(Get-ChildItem -Path $dir -Filter '*.t11l'^)
echo if ($files.Count -eq 0^) {
echo     Write-Host 'No .t11l file found. Place server profile next to this script.' -ForegroundColor Red
echo     Read-Host 'Press Enter to exit'
echo     exit 1
echo }
echo $sel = $files[0]
echo if ($files.Count -gt 1^) {
echo     Write-Host 'Multiple profiles found:'
echo     for ($i = 0; $i -lt $files.Count; $i++^) { Write-Host ('  [' + ($i+1^) + '] ' + $files[$i].Name^) }
echo     $c = Read-Host ('Select (1-' + $files.Count + '^)'^)
echo     $sel = $files[[int]$c - 1]
echo }
echo Write-Host ('Profile: ' + $sel.Name^)
echo $t = Get-Content $sel.FullName -Raw ^| ConvertFrom-Json
echo if (-not $t.updateAddress^) {
echo     Write-Host 'Profile does not contain update server address.' -ForegroundColor Red
echo     Read-Host 'Press Enter to exit'
echo     exit 1
echo }
echo $port = 8090
echo if ($t.updatePort^) { $port = $t.updatePort }
echo $base = 'http://' + $t.updateAddress + ':' + $port + '/updates'
echo Write-Host ('Server: ' + $t.name + ' (' + $t.address + ':' + $t.port + '^)'^)
echo Write-Host ('Update: ' + $t.updateAddress + ':' + $port^)
echo Write-Host ''
echo Write-Host 'Checking latest version... ' -NoNewline
echo try { $v = Invoke-RestMethod ($base + '/version.json'^) }
echo catch { Write-Host ''; Write-Host ('Error: ' + $_.Exception.Message^) -ForegroundColor Red; Read-Host 'Press Enter'; exit 1 }
echo Write-Host ('v' + $v.version^) -ForegroundColor Green
echo $installer = Join-Path $env:TEMP 'LegionVoice-setup.exe'
echo Write-Host ''
echo Write-Host 'Downloading installer... ' -NoNewline
echo $resp = [System.Net.HttpWebRequest]::Create($v.downloadUrl^).GetResponse(^)
echo $total = $resp.ContentLength
echo $stream = $resp.GetResponseStream(^)
echo $fs = [System.IO.File]::Create($installer^)
echo $buf = New-Object byte[] 65536
echo $read = 0; $downloaded = 0; $lastPct = -1
echo while (($read = $stream.Read($buf, 0, $buf.Length^)^) -gt 0^) {
echo     $fs.Write($buf, 0, $read^)
echo     $downloaded += $read
echo     if ($total -gt 0^) {
echo         $pct = [math]::Floor($downloaded * 100 / $total^)
echo         if ($pct -ne $lastPct^) { Write-Host ("`rDownloading installer... " + $pct + "%%"^) -NoNewline; $lastPct = $pct }
echo     }
echo }
echo $fs.Close(^); $stream.Close(^); $resp.Close(^)
echo $size = [math]::Round($downloaded / 1MB, 1^)
echo Write-Host ("`rDownloading installer... Done! (" + $size + " MB^)   "^) -ForegroundColor Green
echo $importDir = Join-Path $env:LOCALAPPDATA 'LegionVoice\import'
echo New-Item -ItemType Directory -Path $importDir -Force ^| Out-Null
echo Copy-Item $sel.FullName (Join-Path $importDir $sel.Name^) -Force
echo Write-Host 'Profile prepared for import.'
echo Write-Host ''
echo Write-Host 'Launching installer...'
echo Start-Process $installer
echo Write-Host ''
echo Write-Host 'Installation started. You can close this window.' -ForegroundColor Green
echo Read-Host 'Press Enter to exit'
) > "%PS_SCRIPT%"

powershell -NoProfile -ExecutionPolicy Bypass -File "%PS_SCRIPT%"
del "%PS_SCRIPT%" 2>nul
exit /b
