//go:build !js || !wasm
// +build !js !wasm

package main

import (
	"crypto/rand"
	"encoding/hex"
	"fmt"
	"io/ioutil"
	"log"
	"strings"
)

// loadOrCreatePlayerCode lädt oder erstellt einen eindeutigen Spieler-Code (Desktop Version)
func (g *Game) loadOrCreatePlayerCode() {
	const codeFile = "player_code.txt"

	// Versuche bestehenden Code zu laden
	if data, err := ioutil.ReadFile(codeFile); err == nil {
		g.playerCode = string(data)
		log.Printf("🔑 Player-Code geladen: %s", g.playerCode)
		return
	}

	// Erstelle neuen Code (32 Hex-Zeichen = 16 Bytes)
	bytes := make([]byte, 16)
	if _, err := rand.Read(bytes); err != nil {
		log.Fatal("Fehler beim Generieren des Player-Codes:", err)
	}
	g.playerCode = hex.EncodeToString(bytes)

	// Speichere Code in Datei
	if err := ioutil.WriteFile(codeFile, []byte(g.playerCode), 0644); err != nil {
		log.Fatal("Fehler beim Speichern des Player-Codes:", err)
	}

	log.Printf("🆕 Neuer Player-Code erstellt: %s", g.playerCode)
}

// loadPlayerName lädt gespeicherten Spielernamen (Desktop Version)
func (g *Game) loadPlayerName() string {
	const nameFile = "player_name.txt"

	if data, err := ioutil.ReadFile(nameFile); err == nil {
		name := strings.TrimSpace(string(data))
		if name != "" {
			log.Printf("👤 Spielername geladen: %s", name)
			return name
		}
	}
	return ""
}

// savePlayerName speichert Spielernamen (Desktop Version)
func (g *Game) savePlayerName(name string) {
	const nameFile = "player_name.txt"

	if err := ioutil.WriteFile(nameFile, []byte(name), 0644); err != nil {
		log.Printf("⚠️ Fehler beim Speichern des Spielernamens: %v", err)
	} else {
		log.Printf("💾 Spielername gespeichert: %s", name)
	}
}

func (g *Game) loadHighscore() int {
	const hsFile = "highscore.txt"
	if data, err := ioutil.ReadFile(hsFile); err == nil {
		var score int
		if _, err2 := fmt.Sscanf(strings.TrimSpace(string(data)), "%d", &score); err2 == nil {
			return score
		}
	}
	return 0
}

func (g *Game) saveHighscore(score int) {
	const hsFile = "highscore.txt"
	ioutil.WriteFile(hsFile, []byte(fmt.Sprintf("%d", score)), 0644)
}
