@echo off
setlocal
title Instalar MEL

set "ORIGEN=https://meldescargas.com"
set "VERSION=1.0.40"
set "HUELLA=50faa3c3aab105d1ed6aa66ed623616d5cc2d8067a411530225f496dd3a0b2c0"
set "PARTES=6"
set "DESTINO=%LOCALAPPDATA%\Programs\MEL"
rem La carpeta temporal lleva un numero al azar A PROPOSITO.
rem
rem Antes era siempre "mel_instalador", y el script hacia rmdir y luego
rem mkdir de la MISMA ruta. En Windows el rmdir puede regresar antes de
rem que el sistema suelte la carpeta (el antivirus o el indexador todavia
rem la tienen abierta), y entonces el mkdir de enseguida falla. Como ese
rem mkdir llevaba 2>nul, el error no se veia: la instalacion reventaba
rem hasta despues, al crear el zip, con un mensaje de PowerShell que no
rem decia nada util.
rem
rem Con un nombre distinto cada vez no hay nada que borrar antes, asi que
rem esa pelea no existe.
set "TEMPO=%TEMP%\mel_bajada_%RANDOM%%RANDOM%"

echo.
echo   Instalar MEL  -  version %VERSION%
echo   =====================================
echo.
echo   Se van a bajar 130 MB en %PARTES% partes.
echo   MEL quedara en: %DESTINO%
echo.
if exist "%DESTINO%\version.mel" (
  echo   OJO: ya hay un MEL instalado en esa carpeta.
  echo   Este instalador es para una computadora NUEVA. Si ya tienes MEL,
  echo   se actualiza solo y no hace falta bajar nada.
  echo.
  pause
  exit /b 1
)
echo   Pide la contrasena al administrador de la farmacia.
echo   No la mandes por WhatsApp ni por correo.
echo.
set "CLAVE="
set /p CLAVE=  Contrasena: 
if "%CLAVE%"=="" (
  echo.
  echo   No escribiste nada. No se bajo nada.
  echo.
  pause
  exit /b 1
)

rem Se limpian los restos de intentos anteriores, sin exigir que se logre.
rem Ninguno estorba: el de hoy tiene otro nombre.
for /d %%C in ("%TEMP%\mel_bajada_*") do rmdir /s /q "%%C" 2>nul
rmdir /s /q "%TEMP%\mel_instalador" 2>nul

echo.
echo   Bajando...
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$ErrorActionPreference='Stop';" ^
  "$t=$env:TEMPO;" ^
  "try{ [void](New-Item -ItemType Directory -Force -Path $t) }catch{ $t=Join-Path $env:LOCALAPPDATA ('MEL_bajada_'+(Get-Random)); [void](New-Item -ItemType Directory -Force -Path $t) }" ^
  "if(-not (Test-Path $t)){ Write-Host '   No se pudo crear la carpeta para bajar.'; exit 3 }" ^
  "$partes=[int]$env:PARTES; $juntas=Join-Path $t 'MEL.zip';" ^
  "$salida=[System.IO.File]::Create($juntas);" ^
  "try{ for($i=1;$i -le $partes;$i++){" ^
  "  $n='MEL_instalador_'+$env:VERSION+'.part'+$i.ToString('00');" ^
  "  Write-Host ('     parte '+$i+' de '+$partes+'...') -NoNewline;" ^
  "  $r=Invoke-WebRequest -UseBasicParsing -Uri ($env:ORIGEN+'/instalador/'+$n) -Headers @{'X-Clave-MEL'=$env:CLAVE};" ^
  "  $salida.Write($r.Content,0,$r.Content.Length); Write-Host ' ok';" ^
  "} } finally { $salida.Close() }" ^
  "$h=(Get-FileHash $juntas -Algorithm SHA256).Hash.ToLower();" ^
  "if($h -ne $env:HUELLA){ Write-Host ''; Write-Host '   LO QUE LLEGO NO CUADRA. No se instala nada.'; exit 2 }" ^
  "Write-Host ''; Write-Host '   La huella cuadra. Descomprimiendo...';" ^
  "Expand-Archive -Path $juntas -DestinationPath $env:DESTINO -Force;" ^
  "$c=Join-Path $env:DESTINO 'config\lugfarma'; [void](New-Item -ItemType Directory -Force -Path $c);" ^
  "$co=[char]34;" ^
  "Set-Content -Path (Join-Path $c 'canal_mel.json') -Encoding ascii -Value ('{'+$co+'clave'+$co+': '+$co+$env:CLAVE+$co+'}');" ^
  "$cx=$null; try{ $cx=Invoke-WebRequest -UseBasicParsing -Uri ($env:ORIGEN+'/instalador/conexion.json') -Headers @{'X-Clave-MEL'=$env:CLAVE} }catch{ };" ^
  "if($cx -ne $null){ $tx=$cx.Content; if($tx -is [byte[]]){ $tx=[System.Text.Encoding]::UTF8.GetString($tx) };" ^
  "  Set-Content -Path (Join-Path $c 'sync.json') -Encoding ascii -Value ([string]$tx) };" ^
  "$w=New-Object -ComObject WScript.Shell;" ^
  "$a=$w.CreateShortcut((Join-Path ([Environment]::GetFolderPath('Desktop')) 'MEL.lnk'));" ^
  "$a.TargetPath=(Join-Path $env:DESTINO 'runtime\pythonw.exe');" ^
  "$a.Arguments=$co+(Join-Path $env:DESTINO 'lanzar_mel.pyw')+$co;" ^
  "$a.WorkingDirectory=$env:DESTINO; $a.Save();" ^
  "Remove-Item -Recurse -Force -Path $t -ErrorAction SilentlyContinue;"
set "SALIO=%ERRORLEVEL%"

rmdir /s /q "%TEMPO%" 2>nul
if not "%SALIO%"=="0" goto :fallo

echo.
echo   LISTO. MEL quedo instalado.
echo.
echo   - Se creo el acceso directo "MEL" en el Escritorio.
echo   - La contrasena ya quedo guardada.
if exist "%DESTINO%\config\lugfarma\sync.json" (
  echo   - Y quedo CONECTADA con la tienda: ya no hay que copiar nada.
) else (
  echo   - OJO: se instalo, pero con esa contrasena NO se conecta con la
  echo     tienda. MEL va a abrir con el foco de "Tienda" en rojo. Pidele
  echo     al administrador la contrasena de instalacion y vuelve a correr
  echo     esto; no hay que desinstalar nada.
)
echo   - De aqui en adelante MEL se actualiza solo: no hay que
echo     volver a bajar nada a mano.
echo.
pause
exit /b 0

:fallo
echo.
if "%SALIO%"=="2" (
  echo   No se instalo nada: lo que llego no coincide con lo publicado.
  echo   Vuelve a intentarlo; si sigue igual, avisa al administrador.
) else if "%SALIO%"=="3" (
  echo   No se pudo crear la carpeta donde se baja MEL.
  echo   Casi siempre es el antivirus o que no hay espacio en el disco.
  echo   No se bajo nada y no se toco nada de esta computadora.
) else (
  echo   No se pudo terminar la instalacion.
  echo   Si no alcanzo a bajar ninguna parte, revisa la contrasena y el internet.
  echo   Si ya habia bajado y fallo despues, mandame la foto de esta ventana.
)
echo.
pause
exit /b 1
