@echo off
setlocal enabledelayedexpansion

:: UTF-8-Ausgabe aktivieren
chcp 65001 >nul

:: Fensterfarbe setzen (z.B. Hintergrund blau, Text weiß)
color 1F

:: Fenstertitel setzen
title [ GLPI-Agent Installer v1.3 by RT ]

:: Überprüfen, ob das Skript mit Administratorrechten ausgeführt wird
net session >nul 2>&1
if %errorlevel% neq 0 (
    powershell -Command "Start-Process '%~f0' -Verb RunAs" >nul 2>&1 
    exit /b
)

:: GitHub-Repositories und Release-Name anpassen
set REPO_OWNER=glpi-project
set REPO_NAME=glpi-agent

:: API-URL für die neueste Release
set API_URL=https://api.github.com/repos/%REPO_OWNER%/%REPO_NAME%/releases/latest

:: Das Verzeichnis der Batch-Datei ermitteln
set SCRIPT_PATH=%~dp0

:: Design: Begrüßungsnachricht mit Rahmen
cls
echo.
echo ╔════════════════════════════════════════════════════════════════════╗
echo ║                        GLPI-Agent Installer                        ║
echo ║                  Installation und Konfiguration starten            ║
echo ╚════════════════════════════════════════════════════════════════════╝
echo.
timeout /t 2 >nul
cls

:: Anzeige der Download-Nachricht
echo ╔════════════════════════════════════════════════════════════════════╗
echo ║                    Die neueste Version wird ermittelt              ║
echo ║                          und heruntergeladen...                    ║
echo ╚════════════════════════════════════════════════════════════════════╝
echo.

:: Abrufen der Release-Daten
for /f "delims=" %%a in ('curl -s %API_URL%') do (
    set line=%%a
    :: Überprüfen, ob die Zeile die URL enthält und nach ".x64.msi" suchen
    echo !line! | findstr /i "browser_download_url" >nul
    if !errorlevel! == 0 (
        :: Überprüfen, ob es eine .x64.msi-Datei ist
        echo %%a | findstr /i ".x64.msi" >nul
        if !errorlevel! == 0 (
            :: Extrahieren der URL (nach "browser_download_url":)
            for /f "tokens=2* delims=:" %%b in ("%%a") do (
                set "url=%%c"
            )
            :: Entferne führende Leerzeichen und Anführungszeichen
            set "url=!url:~1!"
            set "url=!url:"=!"

            :: Entferne das doppelte 'https://github.com' falls vorhanden
            set "url=!url:~1!"

            :: Ausgabe der endgültigen URL
            echo URL der neuesten Version: !url!
            echo.

            :: Datei herunterladen und im gleichen Verzeichnis speichern
            set "filename=%SCRIPT_PATH%GLPI-Agent.msi"
            curl -k -L -o "!filename!" "!url!"

            echo Die Datei wurde erfolgreich heruntergeladen und als "!filename!" gespeichert.
            echo.
        )
    )
)

:: 2 Sekunden warten, bevor der Bildschirm gelöscht wird
timeout /t 2 >nul
cls

:: Überprüfen, ob der GLPI-Agent Dienst läuft
echo Überprüfen, ob der GLPI-Agent Dienst läuft...
set AGENT_INSTALLED=0

:: Überprüfen, ob der Dienst "glpi-agent" läuft
sc query "glpi-agent" >nul 2>&1
if %errorlevel%==0 (
    set AGENT_INSTALLED=1
    echo Der GLPI-Agent Dienst ist bereits aktiv.
    
    :: Stoppen des Dienstes
    echo Der GLPI-Agent Dienst wird gestoppt...
    net stop "glpi-agent" >nul 2>&1 
    
    :: Deinstallieren des Agenten
    echo Der GLPI-Agent wird aktualisiert...
    msiexec /x "%SCRIPT_PATH%GLPI-Agent.msi" /quiet /norestart >nul 2>&1 
    timeout /t 2 >nul
)

:: Tag erneut setzen
echo ╔════════════════════════════════════════════════════════════════════╗
echo ║               Bitte geben Sie die Standort-ID ein                  ║
echo ║ (Beispiel Format z.B. NI001 für Nienburg):                         ║
echo ╚════════════════════════════════════════════════════════════════════╝
set /p TAG=Standort-ID: 

:: Überprüfen, ob Standort-ID eingegeben wurde
if "%TAG%"=="" (
    echo [FEHLER] Keine Standort-ID eingegeben. Installation wird abgebrochen.
    pause
    exit /b 1
)

:: Überprüfen, ob die MSI-Datei existiert
if not exist "%SCRIPT_PATH%GLPI-Agent.msi" (
    echo [FEHLER] Die MSI-Datei "GLPI-Agent.msi" wurde nicht im aktuellen Verzeichnis gefunden.
    pause
    exit /b 1
)

:: Server-URL festlegen
set SERVER=https://support.oks.de

:: Installation starten
cls
echo ╔════════════════════════════════════════════════════════════════════╗
echo ║                      Installation wird gestartet                   ║
echo ╚════════════════════════════════════════════════════════════════════╝
echo.
msiexec /i "%SCRIPT_PATH%GLPI-Agent.msi" /quiet ^
RUNNOW=1 ^
SCAN_HOMEDIRS=0 ^
SCAN_PROFILES=1 ^
NET_DISCOVERY=1 ^
TASKS=Deploy,Inventory,NetDiscovery ^
FORCEINVENTORY=1 ^
ADDLOCAL=ALL ^
ADD_FIREWALL_EXCEPTION=1 ^
TAG="%TAG%" ^
SERVER="%SERVER%" ^
/L*V "%SCRIPT_PATH%GLPI_Agent_Installation.log"

:: Abschlussmeldung
cls
if %errorlevel%==0 (
    echo ╔════════════════════════════════════════════════════════════════════╗
    echo ║              Installation erfolgreich abgeschlossen!                ║
    echo ║            Der GLPI-Agent ist nun betriebsbereit.                  ║
    echo ╚════════════════════════════════════════════════════════════════════╝
) else (
    echo ╔════════════════════════════════════════════════════════════════════╗
    echo ║           Fehler während der Installation aufgetreten!             ║
    echo ║ Fehlercode: %errorlevel%                                           ║
    echo ╚════════════════════════════════════════════════════════════════════╝
)

pause
