class_name SpawnController extends Node3D

@export_category("SpawnController")

@onready var blue_spawners: Node3D = $Blue
@onready var red_spawners: Node3D = $Red

const SINGLE_SPAWN_CONTROLLER_PATH = "res://scenes/maps/base/single_spawn_controller.gd"
enum Sides { BLUE, RED, UNDEFINED }

@export var side: Sides = Sides.UNDEFINED


# Called when the node enters the scene tree for the first time.
func _ready() -> void:
	var single_spawn_controller: GDScript = ResourceLoader.load(SINGLE_SPAWN_CONTROLLER_PATH)
	for spawn: Node3D in blue_spawners.get_children():
		spawn.set_script(single_spawn_controller)
	for spawn: Node3D in red_spawners.get_children():
		spawn.set_script(single_spawn_controller)
	pass  # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
	pass


func _get_available_spawn(spawn_set: Node3D) -> Node3D:
	if multiplayer.is_server():
		var spawns: Array[Node3D] = []
		for spawn: Node3D in spawn_set.get_children():
			if not spawn.busy:
				spawns.push_back(spawn)
		var random_index: int = randi_range(0, spawns.size() - 1)
		return spawns[random_index]
	return null


func get_spawner(team: Sides) -> Vector3:
	match team:
		Sides.BLUE:
			var spawn := _get_available_spawn(blue_spawners)
			return spawn.choose_spawn_location()
		Sides.RED:
			var spawn := _get_available_spawn(red_spawners)
			return spawn.choose_spawn_location()
		_:
			return Vector3(0, 0, 0)
#	Get all spawners for each team