class_name SettingsMenu
extends Panel


@export_group("Game Option Nodes")
@export var block_highlight_input: CheckButton
@export var held_block_ui_input: CheckButton
@export var quick_slots_ui_input: CheckButton
@export var screenshot_icon_input: CheckButton
@export var waila_input: CheckButton

@export_group("Graphics Settings Nodes")
@export var resolution_input: OptionButton
@export var fullscreen_input: CheckBox
@export var vsync_input: CheckBox
@export var fov_slider: HSlider
@export var fov_value_label: Label


func _ready() -> void:
	apply_default_values()


## Sets the default values of all the inputs
func apply_default_values() -> void:
	#region Game Options
	block_highlight_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_block_highlight)
	held_block_ui_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_held_block)
	quick_slots_ui_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_quickslots_ui)
	screenshot_icon_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_save_screenshots)
	waila_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_waila)
	#endregion

	#region Graphics Settings
	# Changing the FOV value should trigger the value_changed signal which should update the camera and label automatically
	fov_slider.value = GameSettingsManager.settings.graphics.fov
	fullscreen_input.set_pressed_no_signal(GameSettingsManager.settings.graphics.fullscreen)
	vsync_input.set_pressed_no_signal(GameSettingsManager.settings.graphics.vsync)

	var current_resolution_index: int = resolution_input.get_item_index(GameSettingsManager.settings.graphics.resolution_id)
	resolution_input.select(current_resolution_index)
	#endregion


#region Game Settings
func _on_block_highlighting_toggled(toggled_on: bool) -> void:
	GameSettingsManager.game_options_block_highlight_changed.emit(toggled_on)

func _on_held_block_ui_toggled(toggled_on: bool) -> void:
	GameSettingsManager.game_options_held_block_ui_changed.emit(toggled_on)

func _on_quickslots_ui_toggled(toggled_on: bool) -> void:
	GameSettingsManager.game_options_quickslots_ui_changed.emit(toggled_on)

func _on_enable_waila_toggled(toggled_on: bool) -> void:
	GameSettingsManager.game_options_waila_changed.emit(toggled_on)

func _on_screenshot_icon_button_toggled(toggled_on: bool) -> void:
	GameSettingsManager.game_options_screenshot_saves_changed.emit(toggled_on)
	SaveGameManager.toggle_save_icon_generation.emit(toggled_on)
#endregion

#region Graphics Settings
func _on_fov_slider_changed(value: float) -> void:
	fov_value_label.text = str(int(value))
	GameSettingsManager.graphics_fov_changed.emit(int(fov_slider.value))

func _on_graphics_apply_button_pressed() -> void:
	var values: Array = resolution_input.text.split_floats("x")
	var id: int = resolution_input.get_selected_id()

	GameSettingsManager.graphics_resolution_changed.emit(Vector2i(values[0], values[1]), id)
	GameSettingsManager.graphics_fullscreen_changed.emit(fullscreen_input.button_pressed)
	GameSettingsManager.graphics_vsync_changed.emit(vsync_input.button_pressed)
	GameSettingsManager.apply_graphics_settings.emit()
#endregion

#region Audio Settings
#endregion

#region Input Settings
#endregion


func _on_close_button_pressed() -> void:
	SignalManager.resume_game.emit()