extends WindowDialog

onready var input_box = $Input
onready var output_box = $Output
onready var command_handler = $CommandHandler

func _ready():
	input_box.grab_focus()

func process_command(text: String):
	var words = text.split(" ")
	words = Array(words)
	
	for i in range(words.count("")):
		words.erase("")
		
	if words.size() == 0:
		return
		
	var cmd_word = words.pop_front()
	
	for cmd in command_handler.valid_commands:
		if cmd[0] == cmd_word:
			if words.size() != cmd[1].size():
				output_text(str('Failure executing command "', cmd_word,
				 '", expected ', cmd[1].size(), ' parameters'))
				return
				
			for i in range(words.size()):
				if not check_type(words[i], cmd[1][i]):
					output_text(str('Failure executing command "', cmd_word,
					 '", parameter ', (i + 1), ' ("', words[i], '") is of the wrong type'))
					return
			
				output_text(command_handler.callv(cmd_word, words))
				return
			
	output_text(str('Command: "', cmd_word, '" does not exist'))

func check_type(string: String, type):
	if type == command_handler.ARG_INT:
		return string.is_valid_integer()
		
	if type == command_handler.ARG_FLOAT:
		return string.is_valid_float()
		
	if type == command_handler.ARG_STRING:
		return true
		
	if type == command_handler.ARG_BOOL:
		return (string == "true" or string == "false")
	
	return false
	
func output_text(text):
	output_box.text = str(output_box.text + "\n", text)

func _on_Input_text_entered(new_text):
	input_box.clear()
	process_command(new_text)
	
func _on_SubmitBtn_pressed():
	input_box.clear()
	process_command(input_box.text)
