#if defined _entWatch_include
  #endinput
#endif
#define _entWatch_include

/**
 * Checks if a client is currently banned, if an integer variable is referenced the time of unban will be assigned to it.
 *
 * @param client		Client index to check for ban
 * @param iTimeStamp	Pass an integer variable by reference and it will contain the UNIX timestamp when the player will be unbanned
 * @return				True if user is banned, false otherwise
 *
 * On error/errors:		Invalid client index/client is not in game or client cookies are not yet loaded
 */
native bool:entWatch_IsClientBanned(client, &iTimeStamp);

/**
 * Bans a client from using special items.
 *
 * @param client		Client index to ban
 * @param IsTemporary	If the ban should be temporary pass true here
 * @param iLength		Length of ban in minutes, pass 0 here for a permanent ban
 * @return				True on success, false otherwsie
 *
 * On error/errors:		Invalid client index/client is not in game or client cookies are not yet loaded
 */
native bool:entWatch_BanClient(client, bool:bIsTemporary=false, iLength=0);

/**
 * Unbans a previously ebanned Client.
 *
 * @param client		Client index to unban
 * @return				True on success, false otherwsie
 *
 * On error/errors:		Invalid client index/client is not in game or client cookies are not yet loaded
 */
native bool:entWatch_UnbanClient(client);

/**
 * Checks if an entity is a special item.
 *
 * @param entity		Entity index to check
 * @return				True if entity is a special item, false otherwsie
 */
native bool:entWatch_IsSpecialItem(entity);

/**
 * Checks if a client has a special item.
 *
 * @param client		Client index to check
 * @return				True if client has a special item, false otherwsie
 */
native bool:entWatch_HasSpecialItem(client);

/**
 * Called when a client is e-banned by any means
 *
 * @param admin			Admin index that issued the ban
 * @param iLength		Length of the ban in UNIX time
 * @param client		Client index that was banned
 *
 * @return				None
 */
forward entWatch_OnClientBanned(admin, iLenght, client);

/**
 * Called when a client is e-unbanned by any means
 *
 * @param admin			Admin index that removed the ban
 * @param client		Client index that was unbanned
 * @return				None
 */
forward entWatch_OnClientUnbanned(admin, client);

//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetTargetName(entity, String:buffer[], size)
{
	return GetEntPropString(entity, Prop_Data, "m_iName", buffer, size);
}

//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetParentName(entity, String:buffer[], size)
{
	return GetEntPropString(entity, Prop_Data, "m_iParent", buffer, size);
}

//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetHammerID(entity)
{
	return GetEntProp(entity, Prop_Data, "m_iHammerID");
}

//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetClassName(entity, String:buffer[], size)
{
	GetEntPropString(entity, Prop_Data, "m_iClassname", buffer, size);

	if (buffer[0] == '\0') {
		return false;
	}

	return true;
}

//----------------------------------------------------------------------------------------------------
// Purpose: SMLib
//----------------------------------------------------------------------------------------------------
stock Entity_GetEntityFromHammerID(hammerID)
{
	for (new i = 0; i < 4096; i++)
	{
		if (IsValidEntity(i) && Entity_GetHammerID(i) == hammerID)
		{
			if (IsValidEntity(i))
				return i;
		}
	}

	return -1;
}

public SharedPlugin:__pl_entWatch =
{
	name = "entWatch",
	file = "entWatch.smx",
#if defined REQUIRE_PLUGIN
	required = 1
#else
	required = 0
#endif
};

#if !defined REQUIRE_PLUGIN
public __pl_entWatch_SetNTVOptional()
{
	MarkNativeAsOptional("entWatch_IsClientBanned");
	MarkNativeAsOptional("entWatch_BanClient");
	MarkNativeAsOptional("entWatch_UnbanClient");
	MarkNativeAsOptional("entWatch_IsSpecialItem");
	MarkNativeAsOptional("entWatch_HasSpecialItem");
}
#endif