extends Panel

@onready var item_icon: Sprite2D = %item_display
@onready var lbl_amount: Label = $lbl_amount

var slot: InvSlot

func update(new_slot: InvSlot):
	slot = new_slot
	if !slot.item:
		item_icon.visible = false
		lbl_amount.text = ""
	else:
		item_icon.visible = true
		item_icon.texture = slot.item.texture
		if slot.amount > 1:
			lbl_amount.text = str(slot.amount)
		else: 
			lbl_amount.text = ""

func _gui_input(event: InputEvent) -> void: # Check voor left mouse button click
	if event is InputEventMouseButton and event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT:
		_handle_click()

func _handle_click():
	var inv_ui = get_tree().get_first_node_in_group("inv_ui") # pak hele UI
	if inv_ui == null:
		return # als geen inv ui, doe niks

	if slot.item == null and inv_ui.held_slot != null and inv_ui.held_slot.item != null: # als slot = leeg en je hebt iets vast 
		slot.item = inv_ui.held_slot.item
		slot.amount = inv_ui.held_slot.amount
		inv_ui.held_slot.item = null # zet slot naar niks
		inv_ui.held_slot.amount = 0 # zet amount naar 0
		inv_ui.held_slot = null
		inv_ui.inv.update.emit() # stuur update signaal om alles te updaten
		return

	if inv_ui.held_slot == null and slot.item != null: # als je niks vast hebt en iets pakt
		inv_ui.held_slot = slot
		return

	if inv_ui.held_slot == slot: # Zelfde slot
		inv_ui.held_slot = null
		return

	if inv_ui.held_slot != null and inv_ui.held_slot.item != null:
		var held = inv_ui.held_slot

		if slot.item == held.item: # als zelfde item
			slot.amount += held.amount
			held.item = null
			held.amount = 0
		else: # als niet zelfde item
			var temp_item = slot.item
			var temp_amount = slot.amount
			slot.item = held.item
			slot.amount = held.amount
			held.item = temp_item
			held.amount = temp_amount

		inv_ui.held_slot = null
		inv_ui.inv.update.emit() # update UI
