//go:build wasm
// +build wasm

package main

import (
	_ "embed"
	"encoding/json"
	"fmt"
	"log"
	"path/filepath"

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

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

//go:embed web/assets/assets.json
var assetsJSON []byte

func (g *Game) loadAssets() {
	// Assets Manifest aus eingebetteter Datei laden
	var m game.AssetManifest
	if err := json.Unmarshal(assetsJSON, &m); err != nil {
		log.Printf("⚠️  Fehler beim Parsen von assets.json: %v", err)
		g.world.Manifest = game.AssetManifest{Assets: make(map[string]game.AssetDefinition)}
	} else {
		g.world.Manifest = m
		fmt.Println("✅ Assets Manifest geladen (WASM):", len(m.Assets), "Einträge")
	}

	// Chunks laden (auch per go:embed in chunks_wasm.go)
	g.loadChunks()

	// Bilder vorladen - In WASM sind die Assets relativ zum HTML
	baseDir := "./assets"
	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 (WASM): %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)
}
