extends Area3D

var _triggered: bool = false

func _ready() -> void:
	body_entered.connect(_on_body_entered)

func _on_body_entered(body: Node) -> void:
	if _triggered:
		return
	if body.name != "Player":
		return
	GameFacts.set_fact("world.has_touched_bad_guy", true)
	_triggered = true

# ------------------------------------------------------------------------------
# SCHEDULER INTERFACE
# ------------------------------------------------------------------------------

@export var scheduler_id: String = ""

func _enter_tree() -> void:
	if scheduler_id == "":
		var zone_name := "UNKNOWN"
		if owner:
			zone_name = owner.name.to_upper()
		elif get_parent():
			zone_name = get_parent().name.to_upper()
		scheduler_id = "%s.%s" % [zone_name, name]
	
	if GameManager and not Engine.is_editor_hint():
		GameManager.register_entity(scheduler_id, self)

func _exit_tree() -> void:
	if GameManager and not Engine.is_editor_hint():
		GameManager.unregister_entity(scheduler_id)

func get_scheduler_states() -> Dictionary:
	return {
		"idle": { "description": "Enemy is standing still" },
		"patrol": { "description": "Enemy is patrolling" },
		"inactive": { "description": "Enemy is hidden/disabled" }
	}

func get_scheduler_facts() -> Array:
	return ["world.has_touched_bad_guy"]

func get_default_state() -> String:
	return "idle"

func apply_scheduler_state(state_name: String, _params: Dictionary = {}) -> void:
	match state_name:
		"idle":
			visible = true
			process_mode = Node.PROCESS_MODE_INHERIT
			# Add idle logic here
		"patrol":
			visible = true
			process_mode = Node.PROCESS_MODE_INHERIT
			# Add patrol logic here
		"inactive":
			visible = false
			process_mode = Node.PROCESS_MODE_DISABLED
		_:
			push_warning("BadGuy1: Unknown state '%s'" % state_name)
