class_name Inventory
extends Node

signal item_added(item: Item)
signal item_removed(item: Item)

@export var max_size: int = 0
var shuffle_count: int = 0
var contents: Array[Item] = []
var size: int :
	set(_value):
		return
	get:
		return contents.size()


func add(item: Item) -> bool:
	if item != null and max_size == 0 or size < max_size:
		contents.append(item)
		item_added.emit(item)
		#networked_add.rpc(Data.cards.find(item))
		return true
	return false


func item_at(index: int) -> Item:
	if size == 0:
		return null
	var item: Item = contents[index]
	return item


func remove_at(index: int) -> Item:
	var item: Item = contents.pop_at(index)
	item_removed.emit(item)
	return item


func shuffle() -> void:
	var new_contents: Array[Item] = []
	for x: int in contents.size():
		new_contents.append(contents.pop_at(NoiseRandom.randi_in_range(shuffle_count * 9, 0, contents.size() - 1)))
	contents = new_contents


#@rpc("reliable", "any_peer")
#func networked_add(value: int) -> void:
	#var item: Item = Data.cards[value]
	#if contents.has(item):
		#contents[item] += 1
	#else:
		#contents[item] = 1
	#item_added.emit(item)
#
#
#@rpc("reliable", "any_peer")
#func networked_remove_at(value: int) -> void:
	#var item: Item = contents.keys()[value]
	#contents[item] -= 1
	#if contents[item] == 0:
		#contents.erase(item)
	#item_removed.emit(item)
