class_name ServerEntryId
extends RefCounted

## Adapter-namespaced numeric entry from a server database or canonical snapshot.
## Equal numbers in different template tables are intentionally different IDs.

var entry_namespace: String:
	get:
		return _entry_namespace

var entry_value: int:
	get:
		return _entry_value

var _entry_namespace: String
var _entry_value: int


## Normalizes a table/adapter namespace and preserves its positive entry value.
func _init(entry_namespace_value: String, entry_value_value: int) -> void:
	_entry_namespace = entry_namespace_value.strip_edges().to_lower()
	_entry_value = entry_value_value


## Reports whether both collision-prevention fields are present.
func is_valid() -> bool:
	return not _entry_namespace.is_empty() and _entry_value > 0


## Compares both namespace and numeric entry.
func equals(other_server_entry_id: ServerEntryId) -> bool:
	return (
		other_server_entry_id != null
		and _entry_namespace == other_server_entry_id.entry_namespace
		and _entry_value == other_server_entry_id.entry_value
	)


## Returns the stable adapter key without implying a ContentId mapping.
func to_key() -> String:
	return "%s:%d" % [_entry_namespace, _entry_value]
