extends Node
class_name SpawnerChoice


@export var spawners: Array[Spawner] = []
@export var weights: Array[int] = []


func compute_total_weight() -> int:
	var total = 0
	for weight in weights:
		if weight < 0:
			Log.e(self, "Weight with negative value detected.")
		total += weight
	return total

func select_spawner() -> Spawner:
	var total = compute_total_weight()
	var sampled = Random.rng.randi_range(0, total - 1)
	var idx = -1
	while sampled >= 0:
		idx += 1
		sampled -= weights[idx]
	return spawners[idx]

func spawn():
	select_spawner().spawn()


func _ready():
	if len(spawners) != len(weights):
		Log.e(self, "Spawners and weights are different lengths.")
	if compute_total_weight() <= 0:
		Log.e(self, "Weight total is less or equal to 0.")