@echo off
setlocal
title EuroTrans - Instalacion completa

echo ==========================================================
echo  EuroTrans - Instalacion completa
echo ==========================================================
echo.
echo Este programa va a:
echo   1. Descargar el launcher de EuroTrans
echo   2. Descomprimirlo en tu Escritorio, en una carpeta "EuroTrans"
echo   3. Instalar Node.js si no lo tienes (puede pedir permiso de
echo      Administrador, es normal)
echo   4. Instalar las dependencias del launcher
echo   5. Abrir tu navegador para que conectes tu wallet (MetaMask o
echo      Immutable Passport)
echo.
echo (Este archivo es autosuficiente: no necesita ningun otro archivo en la
echo  misma carpeta. Todo el script vive dentro de este .bat.)
echo.
pause

powershell -NoProfile -ExecutionPolicy Bypass -Command "& { $marker = 'REM ' + 'EUROTRANS_PS1_START'; $body = (Get-Content -Raw -LiteralPath '%~f0') -split [regex]::Escape($marker), 2; Invoke-Expression $body[1] }"

echo.
echo ==========================================================
echo  Listo. Puedes cerrar esta ventana.
echo ==========================================================
pause
exit /b

REM EUROTRANS_PS1_START
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$ErrorActionPreference = "Stop"

function Write-Step($msg) { Write-Host "`n==> $msg" -ForegroundColor Cyan }
function Write-Ok($msg)   { Write-Host "[OK] $msg" -ForegroundColor Green }
function Write-Warn($msg) { Write-Host "[!] $msg" -ForegroundColor Yellow }
function Write-Err($msg)  { Write-Host "[ERROR] $msg" -ForegroundColor Red }

$zipUrl = "https://ets2.lastgamestudio.fun/setup/downloads/eurotrans-launcher.zip"
$targetDir = Join-Path ([Environment]::GetFolderPath("Desktop")) "EuroTrans"
$installerExe = Join-Path $targetDir "EuroTrans.exe"

# Cerrar el launcher EuroTrans si está corriendo (libera archivos bloqueados)
Write-Step "Cerrando el launcher EuroTrans si estaba corriendo..."
Get-Process -Name "node" -ErrorAction SilentlyContinue | ForEach-Object {
  try {
    $cmdLine = (Get-WmiObject Win32_Process -Filter "ProcessId=$($_.Id)" -ErrorAction SilentlyContinue).CommandLine
    if ($cmdLine -match [regex]::Escape($targetDir) -or $cmdLine -match "eurotrans") {
      $_ | Stop-Process -Force -ErrorAction SilentlyContinue
    }
  } catch {}
}
Get-Process -Name "cmd","conhost" -ErrorAction SilentlyContinue | ForEach-Object {
  try {
    if ($_.MainWindowTitle -match "EuroTrans") { $_ | Stop-Process -Force -ErrorAction SilentlyContinue }
  } catch {}
}
Start-Sleep -Milliseconds 800

Write-Step "Descargando el launcher de EuroTrans..."
$zipPath = Join-Path $env:TEMP "eurotrans-launcher.zip"
try {
  Invoke-WebRequest -Uri $zipUrl -OutFile $zipPath -UseBasicParsing
} catch {
  Write-Err "No se pudo descargar el launcher: $($_.Exception.Message)"
  Write-Err "Comprueba tu conexion a internet e intenta de nuevo."
  exit 1
}
Write-Ok "Descargado."

Write-Step "Descomprimiendo en $targetDir ..."
# Extraer a carpeta temporal primero, luego copiar con robocopy.
# Evita el error "el elemento está siendo utilizado por otro proceso"
# cuando algún archivo sigue en uso por node/npm.
$tmpExtract = Join-Path $env:TEMP "eurotrans-extract-$(Get-Random)"
New-Item -ItemType Directory -Path $tmpExtract -Force | Out-Null
Expand-Archive -Path $zipPath -DestinationPath $tmpExtract -Force
Remove-Item $zipPath -ErrorAction SilentlyContinue

New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
Start-Process robocopy -ArgumentList "`"$tmpExtract`" `"$targetDir`" /E /IS /IT /NP /NJH /NJS /R:2 /W:1" -Wait -WindowStyle Hidden
Remove-Item $tmpExtract -Recurse -Force -ErrorAction SilentlyContinue
Write-Ok "Descomprimido en $targetDir."

if (-not (Test-Path $installerExe)) {
  Write-Err "No se encontro $installerExe tras descomprimir. Algo salio mal con el paquete descargado."
  exit 1
}

Write-Step "Creando acceso directo en el Escritorio..."
try {
  $shell = New-Object -ComObject WScript.Shell
  $lnk = $shell.CreateShortcut("$([Environment]::GetFolderPath('Desktop'))\EuroTrans.lnk")
  $lnk.TargetPath       = $installerExe
  $lnk.WorkingDirectory = $targetDir
  $lnk.IconLocation     = "$targetDir\icon.ico,0"
  $lnk.Description      = "EuroTrans - Euro Truck Simulator 2"
  $lnk.Save()
  Write-Ok "Acceso directo creado en el Escritorio."
} catch {
  Write-Warn "No se pudo crear el acceso directo: $($_.Exception.Message)"
}

Write-Step "Ejecutando EuroTrans (instalacion de dependencias si es la primera vez + arranque del launcher)..."
Write-Warn "Windows puede pedir permiso de Administrador para instalar Node.js si no lo tienes - acepta esa ventana."
Start-Process -FilePath $installerExe -WorkingDirectory $targetDir -Wait
Write-Ok "Listo. El launcher de EuroTrans deberia estar corriendo."
