#pragma once

#include "td/protocol/Protocol.h"
#include "td/protocol/PacketsForward.h"

namespace td {
namespace protocol {

class PacketDispatcher;

class PacketHandler {
private:
	PacketDispatcher* m_Dispatcher;
public:
	PacketHandler(PacketDispatcher* dispatcher) : m_Dispatcher(dispatcher) {}
	virtual ~PacketHandler() {}

	PacketDispatcher* GetDispatcher() { return m_Dispatcher; }

	virtual void HandlePacket(const ConnexionInfoPacket* packet) {}
	virtual void HandlePacket(const DisconnectPacket* packet) {}
	virtual void HandlePacket(const KeepAlivePacket* packet) {}
	virtual void HandlePacket(const PlaceTowerPacket* packet) {}
	virtual void HandlePacket(const PlayerBuyItemPacket* packet) {}
	virtual void HandlePacket(const PlayerBuyMobUpgradePacket* packet) {}
	virtual void HandlePacket(const PlayerJoinPacket* packet) {}
	virtual void HandlePacket(const PlayerLeavePacket* packet) {}
	virtual void HandlePacket(const PlayerListPacket* packet) {}
	virtual void HandlePacket(const PlayerLoginPacket* packet) {}
	virtual void HandlePacket(const RemoveMobPacket* packet) {}
	virtual void HandlePacket(const RemoveTowerPacket* packet) {}
	virtual void HandlePacket(const SelectTeamPacket* packet) {}
	virtual void HandlePacket(const SendMobsPacket* packet) {}
	virtual void HandlePacket(const ServerTpsPacket* packet) {}
	virtual void HandlePacket(const SpawnMobPacket* packet) {}
	virtual void HandlePacket(const UpdateCastleLifePacket* packet) {}
	virtual void HandlePacket(const UpdateExpPacket* packet) {}
	virtual void HandlePacket(const UpdateGameStatePacket* packet) {}
	virtual void HandlePacket(const UpdateLobbyTimePacket* packet) {}
	virtual void HandlePacket(const UpdateMobStatesPacket* packet) {}
	virtual void HandlePacket(const UpdateMoneyPacket* packet) {}
	virtual void HandlePacket(const UpdatePlayerTeamPacket* packet) {}
	virtual void HandlePacket(const UpgradeTowerPacket* packet) {}
	virtual void HandlePacket(const WorldAddTowerPacket* packet) {}
	virtual void HandlePacket(const WorldBeginDataPacket* packet) {}
	virtual void HandlePacket(const WorldDataPacket* packet) {}
};

} // namespace protocol
} // namespace td