@tool class_name FmodPathEditorProperty extends EditorProperty

var ui: Control
var guid_property: String
var path_property: String
var regex := RegEx.new()

var default_line_edit_modulate: Color

func initialize(open_project_explorer_callable: Callable, path_prop: String, guid_prop: String):
	regex.compile("{\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}}")
	guid_property = guid_prop
	path_property = path_prop
	var guid_and_path_ui: FmodGuidAndPathPropertyEditorUi = %FmodGuidAndPathPropertyEditorUi
	
	default_line_edit_modulate = guid_and_path_ui.get_node("%GuidLineEdit").modulate
	
	var open_project_explorer_event = func open_project_explorer_event():
		open_project_explorer_callable.call(self._set_path_and_guid)
	guid_and_path_ui.set_callables(open_project_explorer_event, _set_path, _set_guid)

func _update_property():
	var guid_and_path_ui = %FmodGuidAndPathPropertyEditorUi
	guid_and_path_ui.get_node("%PathLineEdit").text = get_edited_object()[path_property]
	guid_and_path_ui.get_node("%GuidLineEdit").text = get_edited_object()[guid_property]

func _set_path(path: String):
	emit_changed(path_property, path)

func _set_guid(guid: String):
	var line_edit := %FmodGuidAndPathPropertyEditorUi.get_node("%GuidLineEdit") as LineEdit
	if not regex.search(guid):
		line_edit.modulate = Color.RED
		return
	line_edit.modulate = default_line_edit_modulate
	emit_changed(guid_property, guid)

func _set_path_and_guid(path: String, guid: String):
	_set_path(path)
	_set_guid(guid)
