extends Control


var selected_idx = 0


func _ready():
	Global.connect("level_map_updated", Callable(self, "draw"))
	draw()


func _input(event):
	if event.is_action_pressed("DIRECTION_LEFT") and event.get_action_strength("DIRECTION_LEFT") == 1.0:
		selected_idx = max(selected_idx - 1, 0)
		set_cell_selected()
	elif event.is_action_pressed("DIRECTION_RIGHT") and event.get_action_strength("DIRECTION_RIGHT") == 1.0:
		selected_idx = min(selected_idx + 1, Global.Level_Map.size() - 1)
		set_cell_selected()
	elif event.is_action_pressed("UP") and (selected_idx - 3 >= 0) and event.get_action_strength("UP") == 1.0:
		selected_idx = max(selected_idx - 3, 0)
		set_cell_selected()
	elif event.is_action_pressed("DOWN") and (selected_idx + 3 <= Global.Level_Map.size() - 1) and event.get_action_strength("DOWN") == 1.0:
		selected_idx = min(selected_idx + 3, Global.Level_Map.size() - 1)
		set_cell_selected()
	elif event.is_action_pressed("ACCEPT"):
		Global.start_level(selected_idx)


func draw():
	var Cell = load("res://UI/LevelSelectCell.tscn")
	
	for idx in range(Global.Level_Map.size()): # size = 9
		var cell = Cell.instantiate()
		cell.level_idx = idx
		
		if idx == selected_idx:
			cell.set_selected(true)
		
		cell.set_rect_size(
			get_viewport_rect().size.x/3,
			get_viewport_rect().size.y/3
		)
		
		var column = idx % 3
		var row = idx / 3
		cell.position.x = cell.size.x*column
		cell.position.y = cell.size.y*row
		
		cell.connect("gui_input", Callable(self, '_button_pressed').bind(idx))
		
		self.add_child(cell)


func set_cell_selected():
	var cells = get_children()
	for cell in cells:
		cell.set_selected(false)
	
	cells[selected_idx].set_selected(true)


func _button_pressed(event, idx):
	if event is InputEventMouseButton or event is InputEventKey:
		if event.pressed:
			Global.start_level(idx)