extends Panel

@onready var talk_a_texture = preload("res://assets/textures/Xbox Series/Vector/xbox_button_a.svg")
@onready var drag_texture = preload("res://assets/textures/Generic/Vector/generic_button_circle.svg")
@onready var thumbstick = $Thumbstick
var thumbstick_size_factor = 0.5


var middle: Vector2 = Vector2(100, 100)
var touch_start: Vector2 = Vector2(0, 0)
var jump_threshold: float = 10.0
var delta: float = 0.0
var pressed: bool = false

# debug rotation
var rotation_delta: Vector2 = Vector2(0, 0)

func _ready() -> void:
	#thumbstick.custom_minimum_size = Vector2(size.x, size.x) * thumbstick_size_factor
	thumbstick.position = middle - thumbstick.size / 2.0
		
func _on_gui_input(event: InputEvent) -> void:
	if event is not InputEventScreenTouch and event is not InputEventScreenDrag:
		return
	
	if event.is_pressed() == false:
		simulate_joystick_motion(JOY_AXIS_LEFT_X, Vector2.ZERO.x)
		simulate_joystick_motion(JOY_AXIS_LEFT_Y, Vector2.ZERO.y)
		thumbstick.position = middle - thumbstick.size / 2.0
		thumbstick.texture = talk_a_texture
		
	if event is InputEventScreenTouch and pressed == true:
		Input.action_press("ui_select")
		pressed = false
	
	if event is InputEventScreenTouch and event.is_pressed():
		pressed = true
	
	if event is InputEventScreenDrag:
		# cancel the talking action
		pressed = false
		# swap to drag texture
		thumbstick.texture = drag_texture
		
		var touch_position = event.position
		
		# visual thumbstick movement
		var thumbstick_position = touch_position - thumbstick.size / 2.0
		#var clamped_thumbstick_position = thumbstick_position.clampf(-40.0, 40.0)
		thumbstick.position = thumbstick_position
		
		# actual value
		var _delta = middle - touch_position
		var direction = _delta.normalized()
		simulate_joystick_motion(JOY_AXIS_LEFT_X, -direction.x)
		simulate_joystick_motion(JOY_AXIS_LEFT_Y, -direction.y)

func simulate_joystick_motion(axis: int, value: float, device_id: int = 0) -> void:
	var joystick_event = InputEventJoypadMotion.new()
	joystick_event.device = device_id 
	joystick_event.axis = axis  # Axis index (e.g., 0 for X-axis, 1 for Y-axis)
	joystick_event.axis_value = value  # Value of the axis, typically between -1 and 1

	Input.parse_input_event(joystick_event)  # Process the event

func _on_resized() -> void:
	middle = size / 2.0
	thumbstick = get_node("Thumbstick")
	thumbstick.position = middle - thumbstick.size / 2.0
