package components

import (
	"dk/internal/helpers"
	"dk/internal/models/towns"
	"dk/internal/models/users"
	"fmt"

	sushi "git.sharkk.net/Sharkk/Sushi"
)

// LeftAside generates the data map for the left sidebar.
// Returns an empty map when not auth'd.
func LeftAside(ctx sushi.Ctx) map[string]any {
	data := map[string]any{}

	if !ctx.IsAuthenticated() {
		return data
	}

	user := ctx.UserValue("user").(*users.User)

	if user.Currently == "In Town" {
		data["town"], _ = towns.ByCoords(user.X, user.Y)
	}

	// Build owned town maps list
	townList, err := user.GetKnownTowns()
	if err != nil {
		fmt.Printf("User town list error: %s\n", err.Error())
	}
	data["_towns"] = townList

	return data
}

// RightAside generates the data map for the right sidebar.
// Returns an empty map when not auth'd.
func RightAside(ctx sushi.Ctx) map[string]any {
	data := map[string]any{}

	if !ctx.IsAuthenticated() {
		return data
	}

	user := ctx.GetCurrentUser().(*users.User)
	data["_class"] = user.Class()

	data["_expprog"] = fmt.Sprintf("%.1f", user.ExpProgress())

	hpPct := helpers.ClampPct(float64(user.HP), float64(user.MaxHP), 0, 100)
	data["hppct"] = hpPct
	data["mppct"] = helpers.ClampPct(float64(user.MP), float64(user.MaxMP), 0, 100)
	data["tppct"] = helpers.ClampPct(float64(user.TP), float64(user.MaxTP), 0, 100)

	data["hpcolor"] = ""
	if hpPct < 35 {
		data["hpcolor"] = "danger"
	} else if hpPct < 75 {
		data["hpcolor"] = "warning"
	}

	// Build known healing spells list
	healingSpells, err := user.GetHealingSpells()
	if err != nil {
		fmt.Printf("User healing spells list error: %s\n", err.Error())
	}
	data["_spells"] = healingSpells

	return data
}
