class_name Player
extends Control

@onready
var player_name_field := $HBoxContainer/Name

@onready
var add_button := $HBoxContainer/AddPoint

@onready
var minus_button := $HBoxContainer/RemovePoint

@onready
var character := $HBoxContainer/Character

@onready
var remove_player := $HBoxContainer/RemovePlayer

signal change_character_clicked
signal player_removed

@export
var id: int

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
	add_button.pressed.connect(add_point)
	add_button.set_shortcut(create_button_shortcut(id, false))
	minus_button.pressed.connect(minus_point)
	minus_button.set_shortcut(create_button_shortcut(id, true))
	character.pressed.connect(change_character)
	remove_player.pressed.connect(func() -> void: player_removed.emit())
	update_score()
	set_player_character()

func _process(delta: float) -> void:
	remove_player.visible = Settings.edit_players

func create_button_shortcut(scancode : int, ctrl_pressed: bool) -> Shortcut:
	var button_shortcut: Shortcut = Shortcut.new()
	var button_event : InputEventKey = InputEventKey.new()
	button_event.keycode = scancode + 49
	button_event.alt_pressed = true
	button_event.ctrl_pressed = ctrl_pressed
	button_shortcut.events.append(button_event)
	return button_shortcut

func add_point() -> void:
	Settings.player_array[id].add_point()
	update_score()

func minus_point() -> void:
	Settings.player_array[id].minus_point()
	update_score()
 
func change_character() -> void:
	change_character_clicked.emit()

func character_selected(file_name: String) -> void:
	print("Back in player list with: " + file_name)
	Settings.player_array[id].character = load("res://characters/" + file_name)
	set_player_character()
	
func new_character_selected(character_texture: ImageTexture) -> void:
	print("Back in player list with new")
	Settings.player_array[id].character = character_texture
	set_player_character()

func set_player_character() -> void:
	character.custom_minimum_size = Vector2(80, 40)
	character.ignore_texture_size = true
	character.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED
	character.texture_normal = Settings.player_array[id].character

func update_score() -> void:
	if OS.has_feature("debug"):
		player_name_field.text = str(Settings.player_array[id].id) + " " + Settings.player_array[id].player_name + ": " + str(Settings.player_array[id].player_score)
	else:
		player_name_field.text = Settings.player_array[id].player_name + ": " + str(Settings.player_array[id].player_score)
