#!/usr/bin/env bash
# Lanceur WoW Roguelike pour Linux / Steam Deck : met a jour le patch du mode, regle l'adresse du serveur,
# vide le cache, puis lance le jeu avec Wine. A placer dans le dossier du client WoW 1.12.1.
# Lutris / Steam : utilisez ce script comme executable, ou lancez-le avant le jeu.
SERVEUR="82.65.208.233"
BASE="http://${SERVEUR}:8090"
WOW="$(cd "$(dirname "$0")" && pwd)"
PATCH="$WOW/Data/patch-3.MPQ"

[ -f "$WOW/WoW.exe" ] || { echo "WoW.exe introuvable dans $WOW"; exit 1; }

# Mise a jour du lanceur lui-meme (manifest.txt : launcher_sh_sha256), puis relance de la nouvelle version.
if [ -z "${JOUER_DEJA_A_JOUR:-}" ] && MANIFEST0="$(curl -fsS --max-time 15 "$BASE/manifest.txt")"; then
    LSHA="$(printf '%s\n' "$MANIFEST0" | sed -n 's/^launcher_sh_sha256 *= *//p' | tr -d '\r' | tr 'A-F' 'a-f')"
    MOI="$WOW/$(basename "$0")"
    if [ -n "$LSHA" ] && [ "$(sha256sum "$MOI" | cut -d' ' -f1)" != "$LSHA" ]; then
        if curl -fsS --max-time 60 -o "$MOI.telechargement" "$BASE/jouer.sh" &&
           [ "$(sha256sum "$MOI.telechargement" | cut -d' ' -f1)" = "$LSHA" ]; then
            chmod +x "$MOI.telechargement"; mv -f "$MOI.telechargement" "$MOI"; echo "Lanceur mis a jour."
            JOUER_DEJA_A_JOUR=1 exec bash "$MOI" "$@"
        fi
        rm -f "$MOI.telechargement"
    fi
fi

if MANIFEST="$(curl -fsS --max-time 15 "$BASE/manifest.txt")"; then
    VERSION="$(printf '%s\n' "$MANIFEST" | sed -n 's/^version *= *//p' | tr -d '\r')"
    SHA="$(printf '%s\n' "$MANIFEST" | sed -n 's/^sha256 *= *//p' | tr -d '\r' | tr 'A-F' 'a-f')"
    REALM="$(printf '%s\n' "$MANIFEST" | sed -n 's/^realmlist *= *//p' | tr -d '\r')"
    [ -n "$REALM" ] && SERVEUR="$REALM"
    LOCAL=""
    [ -f "$PATCH" ] && LOCAL="$(sha256sum "$PATCH" | cut -d' ' -f1)"
    if [ "$LOCAL" != "$SHA" ]; then
        echo "Mise a jour du patch (version $VERSION)..."
        if curl -fS --max-time 600 -o "$PATCH.telechargement" "$BASE/patch-3.MPQ" &&
           [ "$(sha256sum "$PATCH.telechargement" | cut -d' ' -f1)" = "$SHA" ]; then
            mv -f "$PATCH.telechargement" "$PATCH"; echo "Patch a jour."
        else
            rm -f "$PATCH.telechargement"; echo "Telechargement echoue : lancement avec la version actuelle."
        fi
    else
        echo "Patch a jour (version $VERSION)."
    fi
    # Addon du mode (fenetre des attributs a la place de l'arbre de talents)
    ADDON_SHA="$(printf '%s\n' "$MANIFEST" | sed -n 's/^addon_sha256 *= *//p' | tr -d '\r' | tr 'A-F' 'a-f')"
    MARQUE="$WOW/Interface/AddOns/RoguelikeAttributs/version.sha256"
    if [ -n "$ADDON_SHA" ] && [ "$(cat "$MARQUE" 2>/dev/null | tr -d '\r\n ' | tr 'A-F' 'a-f')" != "$ADDON_SHA" ]; then
        TMPZIP="$(mktemp)"
        if curl -fsS --max-time 120 -o "$TMPZIP" "$BASE/addon-roguelike.zip" &&
           [ "$(sha256sum "$TMPZIP" | cut -d' ' -f1)" = "$ADDON_SHA" ]; then
            mkdir -p "$WOW/Interface/AddOns"
            python3 -c "import sys, zipfile; zipfile.ZipFile(sys.argv[1]).extractall(sys.argv[2])" "$TMPZIP" "$WOW/Interface/AddOns" &&
                echo "$ADDON_SHA" > "$MARQUE" && echo "Addon a jour."
        else
            echo "Addon non mis a jour."
        fi
        rm -f "$TMPZIP"
    fi
else
    echo "Serveur de mises a jour injoignable : lancement avec la version actuelle."
fi

printf 'set realmlist %s\r\n' "$SERVEUR" > "$WOW/realmlist.wtf"
for f in "$WOW"/Data/*/realmlist.wtf; do [ -f "$f" ] && printf 'set realmlist %s\r\n' "$SERVEUR" > "$f"; done
rm -rf "$WOW/WDB"

cd "$WOW" && exec "${WINE:-wine}" WoW.exe "$@"
