class_name Helpers
"""
General purpose Helpers functions
used by discord.gd plugin
"""

# Returns true if value if an int or real float
static func is_num(value) -> bool:
	return typeof(value) == TYPE_INT or typeof(value) == TYPE_FLOAT


# Returns true if value is a string
static func is_str(value) -> bool:
	return typeof(value) == TYPE_STRING


# Returns true if the string has more than 1 character
static func is_valid_str(value) -> bool:
	return is_str(value) and value.length() > 0


# Return a ISO 8601 timestamp as a String
static func make_iso_string(datetime: Dictionary = Time.get_datetime_dict_from_system(true)) -> String:
	var iso_string = '%s-%02d-%02dT%02d:%02d:%02d' % [datetime.year, datetime.month, datetime.day, datetime.hour, datetime.minute, datetime.second]

	return iso_string


# Pretty prints a Dictionary
static func print_dict(d: Dictionary) -> void:
	print(JSON.stringify(d, '\t'))


# Saves a Dictionary to a file for debugging large dictionaries
static func save_dict(d: Dictionary, filename = 'saved_dict') -> void:
	assert(typeof(d) == TYPE_DICTIONARY, 'type of d is not Dictionary in save_dict')
	var file = FileAccess.open('user://%s%s.json' % [filename, str(Time.get_ticks_msec())], FileAccess.WRITE)
	file.store_string(JSON.stringify(d, '\t'))
	file.close()
	print('Dictionary saved to file')


# Converts a raw image bytes to a png Image
static func to_png_image(bytes: PackedByteArray) -> Image:
	var image = Image.new()
	image.load_png_from_buffer(bytes)
	return image


# Converts a Image to ImageTexture
static func to_image_texture(image: Image) -> ImageTexture:
	var texture = ImageTexture.new()
	texture.create_from_image(image)
	return texture


# Ensures that the String's length is less than or equal to the specified length
static func assert_length(variable: String, length: int, msg: String):
	assert(variable.length() <= length, msg)


# Convert the ISO string to a unix timestamp
static func iso2unix(iso_string: String) -> int:
	var date := iso_string.split("T")[0].split("-")
	var time := iso_string.split("T")[1].trim_suffix("Z").split(":")

	var datetime = {
		year = date[0],
		month = date[1],
		day = date[2],
		hour = time[0],
		minute = time[1],
		second = time[2],
	}
	return Time.get_unix_time_from_datetime_dict(datetime)
