extends Button
class_name TitleButton

@export var angle_x_max: float = 7.0
@export var angle_y_max: float = 7.0

var tween_rot: Tween

@onready var menu_btn_texture: TextureRect = $MenuTexture

func _ready() -> void:
	angle_x_max = deg_to_rad(angle_x_max)
	angle_y_max = deg_to_rad(angle_y_max)
	
	# Sets the size to any texture size so 3d effect works on all sizes
	size.x = menu_btn_texture.size.x
	size.y = menu_btn_texture.size.y
	menu_btn_texture.material = menu_btn_texture.material.duplicate()

func _on_gui_input(event: InputEvent) -> void:
	if not event is InputEventMouseMotion:
		return
	
	var mouse_pos: Vector2 = get_local_mouse_position()
	
	# Calculate rotation based on mouse position
	var padding_x = size.x * 0.1
	var padding_y = size.y * 0.1

	var lerp_val_x: float = remap(mouse_pos.x, -padding_x, size.x, 0, 1)
	var lerp_val_y: float = remap(mouse_pos.y, -padding_y, size.y, 0, 1)
	
	var rot_x: float = rad_to_deg(lerp_angle(-angle_x_max, angle_x_max, lerp_val_x))
	var rot_y: float = rad_to_deg(lerp_angle(angle_y_max, -angle_y_max, lerp_val_y))
	
	menu_btn_texture.material.set_shader_parameter("x_rot", rot_y)
	menu_btn_texture.material.set_shader_parameter("y_rot", rot_x)
	
func _on_mouse_exited() -> void:
	# Resets rotation when exited
	if tween_rot and tween_rot.is_running():
		tween_rot.kill()
	tween_rot = create_tween().set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK).set_parallel(true)
	tween_rot.tween_property(menu_btn_texture.material, "shader_parameter/x_rot", 0.0, 0.4)
	tween_rot.tween_property(menu_btn_texture.material, "shader_parameter/y_rot", 0.0, 0.4)
	
func get_texture_rect() -> TextureRect:
	return $MenuTexture
	
func set_image(image_path: String) -> void:
	$MenuTexture.texture = load(image_path)