extends GL_Node_Picker

var audio_selector:OptionButton
var file_dialog:FileDialog

func _ready():
	file_dialog = get_node("FileDialog")
	audio_selector = get_node("HBox").get_node("OptionButton")
	DirAccess.make_dir_recursive_absolute(find_audio_path())
	file_dialog.file_selected.connect(_on_audio_file_selected)
	_update_audio_options()
	
func _on_audio_button_pressed():
	file_dialog.clear_filters()
	file_dialog.current_path = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS)
	file_dialog.add_filter("*.wav ; WAV Audio")
	file_dialog.add_filter("*.mp3 ; MP3 Audio")
	file_dialog.add_filter("*.ogg ; OGG Audio")
	file_dialog.popup_centered()
	
func _on_audio_file_selected(path: String):
	var filename = path.get_file()
	var dest_path = find_audio_path() + "/" + filename

	var file = FileAccess.open(path, FileAccess.READ)
	if file:
		var data = file.get_buffer(file.get_length())
		file.close()

		var save_file = FileAccess.open(dest_path, FileAccess.WRITE)
		if save_file:
			save_file.store_buffer(data)
			save_file.close()
			print("Saved audio to: ", dest_path)
			_update_audio_options(filename)  # repopulate and select this one
		else:
			push_error("Failed to write audio file.")
	else:
		push_error("Failed to read selected audio.")
		
func _update_audio_options(select_filename := ""):
	audio_selector.clear()
	var audio_files := []

	var dir := DirAccess.open(find_audio_path())
	if dir:
		dir.list_dir_begin()
		var file = dir.get_next()
		while file != "":
			if not dir.current_is_dir():
				audio_files.append(file)
			file = dir.get_next()
		dir.list_dir_end()

	audio_files.sort()
	for i in range(audio_files.size()):
		audio_selector.add_item(audio_files[i])
		if audio_files[i] == select_filename:
			audio_selector.select(i)
			_set_audio_path(audio_files[i])
			
func _on_audio_option_selected(index: int):
	var file = audio_selector.get_item_text(index)
	_set_audio_path(file)
	
func _set_audio_path(file: String):
	var path = find_audio_path() + "/" + file
	if mainNode and mainNode.rows.has(valueName):
		var audio = GL_AudioType.new()
		audio.value = path
		mainNode.rows[valueName]["pickValue"] = audio
		print("Audio set: ", path)
	else:
		push_error("mainNode or rows[valueName] not found.")

func find_audio_path() -> String:
	for node in get_tree().get_nodes_in_group("Node Map"):
		if node is GL_Node_Map:
			return "user://Showtapes/" + node._workspace_ID + "/Audio"
	printerr("Uhhhhh")
	return ""