#pragma once

#include "ehs/EHS.h"
#include "ehs/Str.h"
#include "ehs/Serializer.h"

namespace ehs
{
	class CommsSystem;
	class Comms;
	class Endpoint;

	class Operation
	{
	private:
		Str_8 id;
		UInt_64 hashId;

	public:
		virtual ~Operation() = default;

		Operation();

		Operation(const Str_8& id);

		Operation(const Operation& cmd);

		Operation& operator=(const Operation& cmd);

		virtual void Process(Comms* comms, Endpoint* endpoint, CommsSystem* sys, Serializer<>& payload);

		Str_8 GetId() const;

		UInt_64 GetHashId() const;
	};
}