extends "res://scenes/game/entities/entity.gd"

@export_range(1,10) var damage = 1
@export_range(0.1,1) var attackCooldown = 1

@onready var navigationAgent = $NavigationAgent
@onready var targetRaycast = $Radius/RayCast2D
@onready var attackCooldownTimer = $AttackCooldown

@onready var damageArea = $DamageArea

@onready var focusedPlayer = null

func focusPlayer(player):
	focusedPlayer = player

func unfocusPlayer():
	focusedPlayer = null

func _ready() -> void:
	navigationAgent.velocity_computed.connect(Callable(_on_navigation_agent_velocity_computed))

func set_movement_target(movement_target: Vector2):
	navigationAgent.set_target_position(movement_target)

func moveTowardsPlayer():
	if $Radius.get_overlapping_bodies() != [] and not targetRaycast.is_colliding():
		navigationAgent.target_position = focusedPlayer.global_position

func _physics_process(delta: float) -> void:
	if focusedPlayer != null:
		#targetRaycast.target_position = focusedPlayer.global_position - global_position
		if $Radius.get_overlapping_bodies() != [] and not targetRaycast.is_colliding():
			navigationAgent.target_position = focusedPlayer.global_position
	if focusedPlayer != null:
		targetRaycast.target_position = focusedPlayer.global_position - global_position
	else:
		targetRaycast.target_position = Vector2(global_position.x-1000,global_position.y-1000)
		#if $Radius.get_overlapping_bodies() != [] and not targetRaycast.is_colliding():
		#	navigationAgent.target_position = focusedPlayer.global_position
		#if global_position.distance_squared_to(focusedPlayer.global_position) > speed *10:
		
		#moveTowardsPlayer()
	var currentAgentPosition = global_position

	
	if NavigationServer2D.map_get_iteration_id(navigationAgent.get_navigation_map()) == 0:
		return
	if navigationAgent.is_navigation_finished():
		return
	
	var nextPathPosition = navigationAgent.get_next_path_position()
	var newVelocity = currentAgentPosition.direction_to(nextPathPosition)
	if navigationAgent.avoidance_enabled:
		navigationAgent.set_velocity(newVelocity * speed)
	else:
		_on_navigation_agent_velocity_computed(newVelocity)


func _on_navigation_agent_velocity_computed(safe_velocity: Vector2) -> void:
	
	velocity = safe_velocity
	move_and_slide()


func _on_radius_body_entered(body: Node2D) -> void:
	if body.is_in_group("Player"):
		focusPlayer(body)


func _on_radius_body_exited(body: Node2D) -> void:

	if body.is_in_group("Player"):
		unfocusPlayer()

func attack():
	damageArea.attack(damage)


func _on_damage_area_area_entered(area: Area2D) -> void:
	attackCooldownTimer.start(attackCooldown)



func _on_attack_cooldown_timeout() -> void:
	attack()
	attackCooldownTimer.start(attackCooldown)


func _on_damage_area_area_exited(area: Area2D) -> void:
	#attackCooldownTimer.time_left = attackCooldown
	attackCooldownTimer.stop()

#func _on_ray_cast_2d_draw() -> void:
	#if focusedPlayer != null:
		##targetRaycast.target_position = focusedPlayer.global_position - global_position
		#if $Radius.get_overlapping_bodies() != [] and not targetRaycast.is_colliding():
			#navigationAgent.target_position = focusedPlayer.global_position
