extends GraphNode
class_name MMGraphNodeBase

var generator : MMGenBase = null setget set_generator

func _ready() -> void:
	connect("offset_changed", self, "_on_offset_changed")
	connect("gui_input", self, "_on_gui_input")

func _exit_tree() -> void:
	get_parent().call_deferred("check_last_selected")

func _draw() -> void:
	if generator != null and generator.has_randomness():
		var icon = preload("res://material_maker/icons/randomness_locked.tres") if generator.is_seed_locked() else preload("res://material_maker/icons/randomness_unlocked.tres")
		draw_texture_rect(icon, Rect2(rect_size.x-48, 4, 16, 16), false)

func set_generator(g) -> void:
	generator = g

func _on_offset_changed() -> void:
	generator.set_position(offset)

func _input(event) -> void:
	_on_gui_input(event)

func _on_gui_input(event) -> void:
	if event is InputEventMouseButton and event.pressed and event.button_index == BUTTON_LEFT and Rect2(rect_size.x-48, 4, 16, 16).has_point(event.position):
		generator.toggle_lock_seed()
		update()
		get_parent().send_changed_signal()
	elif event is InputEventMouseMotion:
		var epos = event.position
		if Rect2(0, 0, 16, 16).has_point(epos):
			if generator.model != null:
				hint_tooltip = generator.model
			return
		elif Rect2(rect_size.x-48, 4, 16, 16).has_point(epos) and generator.has_randomness():
			if generator.is_seed_locked():
				hint_tooltip = "Unlock the random seed, so it can be modified by moving the node"
			else:
				hint_tooltip = "Lock the random seed to its current value"
			return
		hint_tooltip = ""

func get_slot_tooltip(pos : Vector2):
	for i in range(get_connection_input_count()):
		if is_slot_enabled_left(i) and (get_connection_input_position(i)-pos).length() < 5:
			return "input "+str(i)
	for i in range(get_connection_output_count()):
		if is_slot_enabled_right(i) and (get_connection_output_position(i)-pos).length() < 5:
			return "output "+str(i)
	return ""
