extends Node2D
class_name HuntTarget


signal target_selected(target: Node2D)
signal target_abandoned(target: Node2D)


@export var tag: StringName:
	get:
		return tag
	set(value):
		tag = value
		if hunter != null:
			hunter.tag = value

@export var give_up_secs: float = 5.0

@onready var give_up_timer: Timer = $"GiveUpTimer"
@onready var hunter: Hunter = $"Hunter"

var target: Node2D = null


func pick_new_target():
	if hunter.possible_targets.is_empty():
		return

	var idx = Random.rng.randi_range(0, len(hunter.possible_targets) - 1)
	target = hunter.possible_targets[idx]
	target_selected.emit(target)
	give_up_timer.start(give_up_secs)

func _ready():
	hunter.tag = tag

func _on_hunter_tracked(_body: Node2D):
	if target == null:
		pick_new_target()

func _on_hunter_untracked(body: Node2D):
	if body == target:
		target = null
		target_abandoned.emit(body)
		pick_new_target()

func _on_give_up_timer_timeout() -> void:
	target = null
	pick_new_target()

func _on_target_selected(body: Node2D) -> void:
	Log.p(self, "Target selected: %s" % body)

func _on_target_abandoned(body: Node2D) -> void:
	Log.p(self, "Target abandoned: %s" % body)