//go:build !wasm
// +build !wasm

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"path/filepath"

	"github.com/hajimehoshi/ebiten/v2/ebitenutil"

	"git.zb-server.de/ZB-Server/EscapeFromTeacher/pkg/game"
)

func (g *Game) loadAssets() {
	// Pfad anpassen: Wir suchen im relativen Pfad
	baseDir := "./cmd/client/web/assets"
	manifestPath := filepath.Join(baseDir, "assets.json")

	data, err := ioutil.ReadFile(manifestPath)
	if err == nil {
		var m game.AssetManifest
		json.Unmarshal(data, &m)
		g.world.Manifest = m
		fmt.Println("✅ Assets Manifest geladen (Native):", len(m.Assets), "Einträge")
	} else {
		log.Println("⚠️  assets.json NICHT gefunden! Pfad:", manifestPath)
		// Fallback: Leeres Manifest, damit das Spiel nicht abstürzt
		g.world.Manifest = game.AssetManifest{Assets: make(map[string]game.AssetDefinition)}
	}

	// Chunks laden (plattformspezifisch via Build-Tags)
	g.loadChunks()

	// Bilder vorladen
	loadedImages := 0
	failedImages := 0
	for id, def := range g.world.Manifest.Assets {
		if def.Filename != "" {
			path := filepath.Join(baseDir, def.Filename)
			img, _, err := ebitenutil.NewImageFromFile(path)
			if err == nil {
				g.assetsImages[id] = img
				loadedImages++
			} else {
				log.Printf("⚠️  Bild nicht geladen: %s (%s) - Fehler: %v", id, def.Filename, err)
				failedImages++
			}
		}
	}
	fmt.Printf("🖼️  Bilder (Native): %d geladen, %d fehlgeschlagen\n", loadedImages, failedImages)

	// Alle Sprites in eine Atlas-Textur packen → ein GPU-Draw-Call statt vieler
	g.assetsImages = buildAtlas(g.assetsImages, g.world.Manifest)
}
