#ifndef ENGINE_ANTIBOT_H
#define ENGINE_ANTIBOT_H

#include "kernel.h"

class IAntibot : public IInterface
{
	MACRO_INTERFACE("antibot", 0)
public:
	virtual void RoundStart(class IGameServer *pGameServer) = 0;
	virtual void RoundEnd() = 0;

	// Hooks
	virtual void OnPlayerInit(int ClientID) = 0;
	virtual void OnPlayerDestroy(int ClientID) = 0;
	virtual void OnSpawn(int ClientID) = 0;
	virtual void OnHammerFireReloading(int ClientID) = 0;
	virtual void OnHammerFire(int ClientID) = 0;
	virtual void OnHammerHit(int ClientID, int TargetID) = 0;
	virtual void OnDirectInput(int ClientID) = 0;
	virtual void OnCharacterTick(int ClientID) = 0;
	virtual void OnHookAttach(int ClientID, bool Player) = 0;

	// Commands
	virtual void Dump() = 0;

	virtual ~IAntibot(){};
};

class IEngineAntibot : public IAntibot
{
	MACRO_INTERFACE("engineantibot", 0)
public:
	virtual void Init() = 0;

	// Hooks
	virtual void OnEngineTick() = 0;
	virtual void OnEngineClientJoin(int ClientID, bool Sixup) = 0;
	virtual void OnEngineClientDrop(int ClientID, const char *pReason) = 0;
	virtual bool OnEngineClientMessage(int ClientID, const void *pData, int Size, int Flags) = 0;
	virtual bool OnEngineServerMessage(int ClientID, const void *pData, int Size, int Flags) = 0;
	virtual bool OnEngineSimulateClientMessage(int *pClientID, void *pBuffer, int BufferSize, int *pOutSize, int *pFlags) = 0;

	virtual ~IEngineAntibot(){};
};

#endif //ENGINE_ANTIBOT_H
