# Legt die vollstaendige Tibia-Minimap an - offline aus dem Installerpaket.
#
# Der Bot findet seine Position nur, wenn die Minimap vollstaendig erkundet
# ist. Ein frischer Client hat eine leere Karte. Darum liegt die gepruefte
# Vollkarte (2197 Kacheln, zu 100 % erkundet) als installer/minimap/minimap.zip
# im Paket.
#
# Sie wird in die VORLAGE entpackt (%LOCALAPPDATA%\TibiaPilotNG\minimap-vorlage).
# Von dort kopiert jeder Client-Start sie automatisch ueber die Live-Minimap
# (src/utils/minimap.py, aufgerufen aus tools/Launch-Tibia.py) - das faengt
# auch ab, dass der Client beim Beenden einzelne Kacheln mit seinem eigenen
# duenneren Stand ueberschreibt.
#
# Ist der Client schon installiert, wird die Karte zusaetzlich direkt in
# seinen Live-Ordner gelegt, damit sie sofort da ist.
#
# Idempotent: ueberschreibt eine vorhandene Vorlage mit der geprueften
# Fassung. Eigene Kartenmarkierungen (minimapmarkers.bin) bleiben in der
# Live-Karte unangetastet - die Vorlage enthaelt sie nicht.

param(
    [string]$Repo = (Join-Path $env:USERPROFILE 'TibiaPilotNG')
)

$ErrorActionPreference = 'Stop'

$paket = Join-Path $Repo 'installer\minimap\minimap.zip'
if (!(Test-Path $paket)) { throw "Kartenpaket fehlt: $paket" }

$vorlage = Join-Path $env:LOCALAPPDATA 'TibiaPilotNG\minimap-vorlage'
if (Test-Path $vorlage) { Remove-Item $vorlage -Recurse -Force }
New-Item $vorlage -ItemType Directory -Force | Out-Null
Expand-Archive -Path $paket -DestinationPath $vorlage -Force

$kachelZahl = (Get-ChildItem $vorlage -File -Filter 'Minimap_Color_*.png').Count
if ($kachelZahl -lt 500) {
    throw "Kartenpaket unvollstaendig: nur $kachelZahl Kacheln entpackt."
}

# Wenn Tibia schon installiert ist, die Karte gleich in den Live-Ordner
# spiegeln (nur, wenn der Client gerade nicht laeuft - sonst ueberschreibt
# er sie beim Beenden wieder).
$live = Join-Path $env:LOCALAPPDATA 'Tibia\packages\Tibia\minimap'
$clientLaeuft = [bool](Get-Process client, Tibia -ErrorAction SilentlyContinue)
$liveKacheln = 0
if ((Test-Path (Split-Path $live -Parent)) -and !$clientLaeuft) {
    New-Item $live -ItemType Directory -Force | Out-Null
    Copy-Item (Join-Path $vorlage '*') $live -Force
    $liveKacheln = (Get-ChildItem $live -File -Filter 'Minimap_Color_*.png').Count
}

[ordered]@{
    ok = $true
    vorlage = $vorlage
    vorlageKacheln = $kachelZahl
    liveGespiegelt = ($liveKacheln -gt 0)
    liveKacheln = $liveKacheln
    clientLief = $clientLaeuft
} | ConvertTo-Json -Compress

# Expliziter Erfolgs-Exit-Code. Ohne ihn bleibt $LASTEXITCODE des Aufrufers
# auf dem Wert des zuletzt gelaufenen Programms stehen - direkt nach dem
# robocopy in Sync-Project ist das 1 (= erfolgreich kopiert), und der
# Installer hielt diesen Erfolg fuer einen Fehler dieses Skripts.
exit 0
