class_name MessageButton
"""
Represents a Discord message button.
"""

var _STYLES = {0: 'DEFAULT', 1: 'PRIMARY', 2: 'SECONDARY', 3: 'SUCCESS', 4: 'DANGER', 5: 'LINK'}

enum STYLES { DEFAULT, PRIMARY, SECONDARY, SUCCESS, DANGER, LINK }

var label: String: set = set_label, get = get_label
var custom_id: String: set = set_custom_id, get = get_custom_id
var url: String: set = set_url, get = get_url
var disabled: bool = false: set = set_disabled, get = get_disabled
var emoji: Dictionary

var _style: set = set_style
var type: int = 2


func set_style(style_number: int):
	_style = style_number
	return self


func get_style_string():
	return _STYLES[_style]


func set_label(new_label: String):
	assert(new_label.length() <= 80, 'label of MessageButton must be max 80 characters.')
	label = new_label
	return self


func get_label() -> String:
	return label


func set_custom_id(new_custom_id):
	assert(new_custom_id.length() <= 80, 'custom_id of MessageButton must be max 100 characters.')
	custom_id = new_custom_id
	return self


func get_custom_id() -> String:
	return custom_id


func set_url(new_url):
	url = new_url
	return self


func get_url() -> String:
	return url


func set_disabled(new_value: bool):
	disabled = new_value
	return self


func get_disabled() -> bool:
	return disabled


func set_emoji(new_emoji: Dictionary):
	emoji = new_emoji
	return self

func get_emoji() -> Dictionary:
	return emoji


func _to_string(pretty: bool = false) -> String:
	return JSON.stringify(_to_dict(), '\t') if pretty else JSON.stringify(_to_dict())


func print():
	print(_to_string(true))


func _to_dict() -> Dictionary:
	# Default style is primary
	if _style == 0:
		_style = 1

	if _style == STYLES.LINK:
		# Must have a url
		assert(Helpers.is_valid_str(url), 'A LINK MessageButton must have a url.')
		return {'type': type, 'style': _style, 'label': label, 'url': url, 'disabled': disabled}
	else:
		assert(Helpers.is_valid_str(custom_id), 'A button must have a custom_id.')
		return {
			'type': type,
			'style': _style,
			'label': label,
			'custom_id': custom_id,
			'disabled': disabled,
			'emoji': emoji if emoji else null
		}
