extends Channel

signal on_match_update(msg: TowerPlacedMessage)
signal on_invalid_placing(msg: InvalidPlacementMessage)


func get_channel_location() -> String:
	return "match"


func _process(_delta: float) -> void:
	self.socket.poll()
	if self.socket.get_ready_state() != WebSocketPeer.STATE_OPEN:
		return
	while self.socket.get_available_packet_count():
		var msg: Message = (
			CurrentUnixTimeMessage
			. deserialize(
				self.socket.get_packet().get_string_from_utf8(),
				[TowerPlacedMessage, InvalidPlacementMessage],
			)
		)
		match msg.get_message_id():
			TowerPlacedMessage.MESSAGE_ID:
				on_match_update.emit(msg)
			InvalidPlacementMessage.MESSAGE_ID:
				on_invalid_placing.emit(msg)
			_:
				continue


func send_request_place(x: int, y: int) -> void:
	if self.socket.get_ready_state() != WebSocketPeer.STATE_OPEN:
		return
	var msg := RequestTowerPlacingMessage.new()
	msg.x = x
	msg.y = y
	self.socket.send_text(Message.serialize(msg))