extends GutTest

var EnemyScene = load("res://Game/Mobs/forkman.tscn")  # Path to enemy PackedScene
var _enemy_instance = null
var _mock_parent = null

func before_each():
	# Mock parent instead of PathFollow2D
	_mock_parent = PathFollow2D.new()
	_mock_parent.name = "PathFollow2D_Mock"
	add_child(_mock_parent)
	
	# Instantiate scene
	_enemy_instance = EnemyScene.instantiate()
	_mock_parent.add_child(_enemy_instance)
	
	# Initialize child nodes
	await get_tree().process_frame  # Required for complete _ready() execution

func after_each():
	_enemy_instance.queue_free()
	_mock_parent.queue_free()

# Check for children
func test_scene_initialization():
	var character_body = _enemy_instance.get_node("CharacterBody2D")
	var health_bar = _enemy_instance.get_node("ProgressBar")
	assert_not_null(character_body, "Missing CharacterBody2D")
	assert_not_null(health_bar, "Missing ProgressBar")

# Check damage mechanics
func test_shield_damage_reduction():
	_enemy_instance.current_shield = 50
	_enemy_instance.current_health = 100
	_enemy_instance.enemy_hurt(30)
	assert_eq(_enemy_instance.current_shield, 20, "Incorrect shield value")
	assert_eq(_enemy_instance.current_health, 100, "Health should remain unchanged with this damage amount")

func test_shield_break_and_health_damage():
	_enemy_instance.current_shield = 20
	_enemy_instance.current_health = 100
	_enemy_instance.enemy_hurt(30)
	assert_eq(_enemy_instance.current_shield, 0, "Shield should be depleted")
	assert_eq(_enemy_instance.current_health, 90, "Incorrect health value")

func test_health_damage_without_shield():
	_enemy_instance.current_shield = 0
	_enemy_instance.current_health = 80
	_enemy_instance.enemy_hurt(25)
	assert_eq(_enemy_instance.current_shield, 0, "Shield should remain zero")
	assert_eq(_enemy_instance.current_health, 55, "Incorrect health amount")

#Check for animation change
func test_hurt_animation_plays_on_damage():
	_enemy_instance.enemy_hurt(10)
	var anim_sprite = _enemy_instance.get_node("CharacterBody2D/AnimatedSprite2D")
	assert_eq(anim_sprite.animation, "hurt", "Hurt animation must be playing")

#Check animation speed change
func test_animation_speed_scales_with_speed():
	# Sebesség beállítások ellenőrzése
	_enemy_instance.set_character_data()
	var anim_sprite = _enemy_instance.get_node("CharacterBody2D/AnimatedSprite2D")
	var expected_speed = snapped(_enemy_instance.speed / 100.0 , 0.1)
	assert_eq(snapped(anim_sprite.speed_scale, 0.1), expected_speed, "Animation speed should match movement speed")

#check for cholorchange on healthbar
func test_health_bar_color_changes_with_shield():
	_enemy_instance.current_shield = 50
	_enemy_instance.adjust_health_bar()
	var fill_style = _enemy_instance.get_node("ProgressBar").get_theme_stylebox("fill")
	assert_eq(fill_style.bg_color, Color(0,0,1), "Must be blue in case of shield")

#Check character flip
func test_character_flips_based_on_movement_direction():
	var initial_scale = _mock_parent.scale.x
	_mock_parent.position.x += 10
	_enemy_instance.move_character(0.1)
	assert_gt(_mock_parent.scale.x, 0, "Positive scaling when moving to the right")
	_mock_parent.position.x -= 20
	_enemy_instance.move_character(0.1)
	assert_lt(_mock_parent.scale.x, 0, "Negative scaling when moving left")
