extends Node

@export var player_scene: PackedScene = preload("res://objects/player.tscn")

signal player_joined(player: Player)
signal player_left(player: Player)

func _ready() -> void:
	connect("child_entered_tree", on_child_added)

@rpc("any_peer", "call_remote", "reliable")
func create_player_for_session_id(session_id: int) -> void:
	for child in get_children():
		var player: Player = child as Player
		if player == null:
			continue
		if player.session_id == session_id:
			return
	
	var player: Player = player_scene.instantiate() as Player
	player.name = "Player %d" % session_id
	player.session_id = session_id
	print("Created player object for session ID %d" % session_id)
	add_child(player)

func find_player_by_session_id(session_id: int) -> Player:
	for child in get_children():
		var player: Player = child as Player
		if player == null:
			continue
		if player.session_id == session_id:
			return player
			
	create_player_for_session_id.rpc_id(1, session_id)
	
	for child in get_children():
		var player: Player = child as Player
		if player == null:
			continue
		if player.session_id == session_id:
			return player
	return null

func on_child_added(node: Node) -> void:
	if node is Player:
		print("Player joined: %d" % node.session_id)
		player_joined.emit(node as Player)