extends PacketHandler

signal main_player_spawned(player: Player)

@export var player_scene: PackedScene

func _ready():
	assert(player_scene)

func handle_packet(data: PackedByteArray):
	var buffer := StreamPeerBuffer.new()
	buffer.data_array = data

	var player_id := buffer.get_string()
	var player_name := buffer.get_string()

	var server_position := Vector3()
	server_position.x = buffer.get_float()
	server_position.y = buffer.get_float()
	server_position.z = buffer.get_float()

	print("[%s] Add player: %s %s @ %v" % [Global.username, player_id, player_name, server_position])

	var player := spawn_player(player_id)
	player.position = server_position
	player.set_character_name(player_name)

func spawn_player(id: String) -> Player:
	var player: Player

	if Global.players.has(id):
		player = Global.players.get_player(id)

		if id == Global.account_id:
			Global.player = player
		
		return player
	
	player = player_scene.instantiate()
	player.id = id

	if id == Global.account_id:
		player.controller = PlayerController.new(player)
		Global.player = player
		main_player_spawned.emit(player)
	else:
		player.controller = ProxyController.new(player)
	
	player.add_child(player.controller)
	Global.players.add(player)
	return player