extends CharacterBody2D
class_name Enemy

@onready var animplayer = $AnimationPlayer
@onready var animplayerGun = $AnimationPlayerGun
@onready var shoot_raycast = $ShootRaycast 
@onready var shoot_sound = $EnemyShotSound
@onready var hurt_sound = $HurtSound

var player: Player = null

var hit_chance: float = 0.3
var speed: float = 100.0
var direction := Vector2.ZERO
var stop_distance := 200.0
var hit_points: int = 3
var justShot: bool = false

func _process(delta: float) -> void:
	if player != null:
		look_at(player.global_position)

func _physics_process(delta: float) -> void:
	if player != null:
		var enemy_to_player = (player.global_position - global_position)
		await get_tree().create_timer(0.5).timeout
		enemy_shoot()
		if enemy_to_player.length() > stop_distance:
			direction = enemy_to_player.normalized()
		else: 
			direction = Vector2.ZERO
		
		if direction != Vector2.ZERO:
			velocity = speed * direction
		else:
			velocity.x = move_toward(velocity.x, 0, speed)
			velocity.y = move_toward(velocity.y, 0, speed)
		
		move_and_slide()
	
#func _on_hit_box_body_entered(body: Node2D) -> void:
	#pass


func _on_player_detector_body_entered(body: Node2D) -> void:
	if body is Player:
		if player == null:
			player = body
			print (name + " found the player")


func _on_player_detector_body_exited(body: Node2D) -> void:
		if body is Player:
			if player != null:
				player = null
				print (name + " lost the player")
				
func take_damage(amount: int):
	if amount > 0:
		hit_points -= amount
		hurt_sound.play()
		animplayer.play("take_damage")
		if hit_points <= 0:
			print(name +" died")
			queue_free()
			
func enemy_shoot():
	if justShot != true:
		shoot_sound.play()
		animplayerGun.play("enemy_gun_shot_flare")
		enemy_shot_check()
		justShot = true
		await get_tree().create_timer(1.0).timeout
		justShot = false
		
func enemy_shot_check():
	if shoot_raycast.is_colliding():
		var collider = shoot_raycast.get_collider()
		if collider is StaticBody2D:
			print("Shot a box!")
		elif collider is Player:
			if randf() < hit_chance:
				print("Hit the Player!")
				player.take_damage(1)
			else:
				print("Shot missed the Player!")
