extends Node
class_name DialogicDefinitionsUtil

## This class handles definitions

static func get_definition_by_key(data: Dictionary, key: String, value: String):
	var variables : Array = data['variables']
	var glossary : Array = data['glossary']
	for v in variables:
		if v[key] == value:
			return v
	for g in glossary:
		if g[key] == value:
			return g
	return null


static func get_definition_by_id(data: Dictionary, id: String):
	return get_definition_by_key(data, 'id', id)


static func get_definition_by_name(data: Dictionary, id: String):
	return get_definition_by_key(data, 'name', id)


static func set_definition(section: String, data: Dictionary, elem: Dictionary):
	delete_definition(data, elem['id'])
	var array: Array = data[section]
	var found = false;
	for e in array:
		if e['id'] == elem['id']:
			found = true
			array.erase(e)
			array.append(elem)
			break
	if not found:
		array.append(elem)


static func set_definition_variable(data: Dictionary, id: String, name: String, value):
	set_definition('variables', data, {
		'id': id,
		'name': name,
		'value': value,
		'type': 0
	})


static func set_definition_glossary(data: Dictionary, id: String, name: String,  title: String,  text: String,  extra: String):
	set_definition('glossary', data, {
		'id': id,
		'name': name,
		'title': title,
		'text': text,
		'extra': extra,
		'type': 1
	})


static func delete_definition(data: Dictionary, id: String):
	var variables : Array = data['variables']
	var glossary : Array = data['glossary']
	var item = get_definition_by_id(data, id);
	if item != null:
		if (item['type'] == 0):
			variables.erase(item)
		else:
			glossary.erase(item)


static func definitions_json_to_array(data: Dictionary) -> Array:
	return data['variables'] + data['glossary']