//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================
#ifndef TF_WEAPON_LUNCHBOX_H
#define TF_WEAPON_LUNCHBOX_H
#ifdef _WIN32
#pragma once
#endif

#include "tf_weaponbase.h"

// Client specific.
#ifdef CLIENT_DLL
#define CTFLunchBox C_TFLunchBox
#define CTFLunchBox_Drink C_TFLunchBox_Drink
#endif

enum lunchbox_weapontypes_t
{
	LUNCHBOX_STANDARD = 0,		// Careful, can be the Scout BONK drink, or the Heavy sandvich.
	LUNCHBOX_ADDS_MAXHEALTH,
	LUNCHBOX_ADDS_MINICRITS,
	LUNCHBOX_STANDARD_ROBO,
	LUNCHBOX_STANDARD_FESTIVE,
	LUNCHBOX_ADDS_AMMO,
};

#define TF_SANDWICH_REGENTIME	30
#define TF_CHOCOLATE_BAR_REGENTIME	10

//=============================================================================
//
// TF Weapon Lunchbox.
//
class CTFLunchBox : public CTFWeaponBase
{
public:

	DECLARE_CLASS( CTFLunchBox, CTFWeaponBase );
	DECLARE_NETWORKCLASS(); 
	DECLARE_PREDICTABLE();

// Server specific.
#ifdef GAME_DLL
	DECLARE_DATADESC();
#endif

	CTFLunchBox();

	virtual void	UpdateOnRemove( void );
	virtual void	Precache();
	virtual int		GetWeaponID( void ) const			{ return TF_WEAPON_LUNCHBOX; }
	virtual void	PrimaryAttack();
	virtual void	SecondaryAttack();
	virtual void	WeaponReset( void );
	virtual bool	UsesPrimaryAmmo();

	virtual bool	DropAllowed( void );
	int				GetLunchboxType( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_weapon_mode ); return iMode; };

	float			GetProgress( void ) { return GetEffectBarProgress(); }
	const char*		GetEffectLabelText( void )	{ return "#TF_SANDWICH"; }

	void			DrainAmmo( bool bForceCooldown = false );

	virtual float	InternalGetEffectBarRechargeTime( void ) { return GetLunchboxType() == LUNCHBOX_ADDS_MAXHEALTH ? TF_CHOCOLATE_BAR_REGENTIME : TF_SANDWICH_REGENTIME; }
	virtual void	Detach( void ) OVERRIDE;

#ifdef GAME_DLL
	void			ApplyBiteEffects( CTFPlayer *pPlayer );
#endif

private:
	CTFLunchBox( const CTFLunchBox & ) {}

	// Prevent spamming with resupply cabinets: only 1 thrown at a time
	EHANDLE		m_hThrownPowerup;
};

//=============================================================================
//
// TF Weapon Energy drink.
//
class CTFLunchBox_Drink : public CTFLunchBox
{
public:

	DECLARE_CLASS( CTFLunchBox_Drink, CTFLunchBox );
	DECLARE_NETWORKCLASS(); 
	DECLARE_PREDICTABLE();

	CTFLunchBox_Drink();

	bool				AllowTaunts( void ) { return false; }

	virtual bool		DropAllowed( void ) { return false; }

	const char*			GetEffectLabelText( void )	{ return "#TF_ENERGYDRINK"; }

#ifdef CLIENT_DLL
	virtual const char* ModifyEventParticles( const char* token );
	virtual bool		Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
#endif
};

#endif // TF_WEAPON_LUNCHBOX_H