extends Control
class_name WeaponSlot
## Weapon slot that displays weapon icon and shows tooltip on hover

# References
@onready var icon_rect: TextureRect = $SlotPanel/MarginContainer/IconRect
var tooltip: PanelContainer = null

# Weapon data
var weapon_data: WeaponData = null
var slot_name: String = "Main Hand"

func _ready():
	# Create tooltip as a top-level CanvasLayer child so it's not clipped
	_create_tooltip()

	# Connect mouse events
	mouse_entered.connect(_on_mouse_entered)
	mouse_exited.connect(_on_mouse_exited)

## Create tooltip as a top-level node to avoid clipping
func _create_tooltip():
	# Load tooltip scene template
	var tooltip_scene = load("res://level/ui/scenes/weapon_tooltip.tscn")
	if tooltip_scene:
		tooltip = tooltip_scene.instantiate()
		# Add to the root CanvasLayer (HUD) so it's not clipped
		var hud = get_node_or_null("/root/HUD")
		if hud:
			hud.add_child(tooltip)
			tooltip.hide()
		else:
			push_error("[WeaponSlot] Could not find HUD node")
	else:
		push_error("[WeaponSlot] Failed to load weapon_tooltip.tscn")

## Set weapon data and update display
func set_weapon(data: WeaponData, name: String = "Main Hand"):
	weapon_data = data
	slot_name = name
	_update_display()

## Clear the weapon slot
func clear_weapon():
	weapon_data = null
	_update_display()

## Update the icon display
func _update_display():
	if not icon_rect:
		return

	if weapon_data and weapon_data.icon:
		icon_rect.texture = weapon_data.icon
		icon_rect.modulate = Color.WHITE
	else:
		icon_rect.texture = null
		icon_rect.modulate = Color(0.3, 0.3, 0.3, 0.5)  # Dim empty slot

## Show tooltip on mouse enter
func _on_mouse_entered():
	if weapon_data and tooltip:
		_update_tooltip()
		# Position tooltip to the right of the slot
		var global_pos = global_position
		tooltip.position = Vector2(global_pos.x + size.x + 10, global_pos.y)
		tooltip.show()

## Hide tooltip on mouse exit
func _on_mouse_exited():
	if tooltip:
		tooltip.hide()

## Update tooltip content
func _update_tooltip():
	if not tooltip or not weapon_data:
		return

	var tooltip_label = tooltip.get_node_or_null("MarginContainer/VBoxContainer/StatsLabel")
	if not tooltip_label:
		return

	var text = ""
	text += slot_name.to_upper() + "\n"
	text += weapon_data.weapon_name + "\n"
	text += "---\n"
	text += "Damage: " + str(weapon_data.damage) + "\n"
	text += "Range: " + str(weapon_data.attack_range) + "\n"
	text += "Cooldown: " + str(weapon_data.attack_cooldown) + "s\n"
	text += "Knockback: " + str(weapon_data.knockback_force) + "\n"

	if weapon_data.can_block:
		text += "Block: " + str(int(weapon_data.block_reduction * 100)) + "%\n"

	if weapon_data.description:
		text += "\n" + weapon_data.description

	tooltip_label.text = text
