tool
extends TE_ExtensionHelper

func _is_commented(lines) -> bool:
	for i in len(lines):
		if not lines[i].strip_edges():
			continue
		if not lines[i].strip_edges(true, false).begins_with("# "):
			return false
	return true

func toggle_comment(t:TextEdit, head:String="", tail:String=""):
	if not t.is_selection_active():
		var l = t.cursor_get_line()
		var lt = t.get_line(l)
		var s = len(lt) - len(lt.strip_edges(true, false))
		t.select(l, s, l, len(t.get_line(l)))
	
	var l1 = t.get_selection_from_line()
	var c1 = t.get_selection_from_column()
	var old = t.get_selection_text()
	var new = old.split("\n")
	
	if _is_commented(new):
		for i in len(new):
			if "# " in new[i]:
				var p = new[i].split("# ", true, 1)
				new[i] = p[0] + p[1]
	else:
		for i in len(new):
			if not new[i].strip_edges():
				continue
			var space = TE_Util.get_whitespace_head(new[i])
			new[i] = space + "# " + new[i].strip_edges(true, false)
	
	new = new.join("\n")
	
	t.insert_text_at_cursor(new)
	var l = new.split("\n")
	var l2 = l1 + len(l)-1
	var c2 = c1 + len(l[-1])
	t.select(l1, c1, l2, c2)
	
	return [old, new]

func apply_colors(e:TextEditor, t:TextEdit):
	.apply_colors(e, t)
	
	# strings
	t.add_color_region('"', '"', e.color_var)
	# bools
	t.add_keyword_color("true", e.color_var)
	t.add_keyword_color("false", e.color_var)
	
	# null
	t.add_keyword_color("~", e.color_var)
	
	# array element
	t.add_color_region("- ", "", e.color_text.darkened(.25), true)
	
	# comments
	t.add_color_region("#", "", e.color_comment, true)


func get_symbols(t:String) -> Dictionary:
	var out = .get_symbols(t)
	var last = add_symbol()
	var lines = t.split("\n")
	var i = 0
	
	while i < len(lines):
		# find objects to use as symbols
		if ":" in lines[i]:
			var p = lines[i].split(":", true, 1)
			var r = p[1].strip_edges()
			if not r or r.begins_with("{") or r.begins_with("#"):
				var name = p[0].strip_edges()
				var deep = max(0, len(lines[i]) - len(lines[i].strip_edges(true, false)))
				last = add_symbol(i, deep, name)
		
		# find tags inside comments
		if "# " in lines[i]:
			var p = lines[i].split("# ", true, 1)
			if p[0].count("\"") % 2 != 0:
				pass
			
			elif "#" in p[1]:
				for tag in p[1].split("#", true, 1)[1].split("#"):
					tag = tag.strip_edges()
					if tag:
						last.tags.append(tag)
		
		elif '"#": "' in lines[i]:
			for tag in lines[i].splti('"#": "', true, 1)[1].split('"', true, 1)[0].split("#"):
				tag = tag.strip_edges()
				if tag:
					last.tags.append(tag)
		
		i += 1
	
	return out
