#ifndef TF_WARINFOPANEL_H
#define TF_WARINFOPANEL_H


#include "vgui_controls/EditablePanel.h"
#include "tf_wardata.h"
#include "vgui_controls/ProgressBar.h"
#include "local_steam_shared_object_listener.h"

using namespace vgui;
using namespace GCSDK;

class CExLabel;

class CWarStandingPanel : public EditablePanel, public CGameEventListener
{
	DECLARE_CLASS_SIMPLE( CWarStandingPanel, EditablePanel );
public:
	CWarStandingPanel( Panel* pParent, const char* pszPanelname );

	virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE;
	virtual void ApplySettings( KeyValues *inResourceData ) OVERRIDE;
	virtual void OnThink() OVERRIDE;
	virtual void PerformLayout() OVERRIDE;
	virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
private:

	float GetPercentAnimated() const;

	struct TeamScore_t
	{
		TeamScore_t()
			: m_nLastScore( 0 )
			, m_nNewScore( 0 )
			, m_pTeamProgressBar( NULL )
			, m_pContainerPanel( NULL )
			, m_pTeamLabel( NULL )
			, m_pScoreLabel( NULL )
		{}
		int m_nLastScore;
		int m_nNewScore;
		ContinuousProgressBar	*m_pTeamProgressBar;
		EditablePanel* m_pContainerPanel;
		CExLabel* m_pTeamLabel;
		CExLabel* m_pScoreLabel;
	};

	bool m_bNeedsLerp;
	TeamScore_t m_Scores[2];
	float m_flLastUpdateTime;
	ContinuousProgressBar	*m_pTeam0ProgressBar;
	ContinuousProgressBar	*m_pTeam1ProgressBar;
	CUtlString				m_strWarName;
};

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
class CWarLandingPanel : public EditablePanel, public CLocalSteamSharedObjectListener
{
	DECLARE_CLASS_SIMPLE( CWarLandingPanel, EditablePanel );
public:
	CWarLandingPanel( Panel *pParent, const char *pszPanelName );

	virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE;
	virtual void ApplySettings( KeyValues *inResourceData );
	virtual void OnCommand( const char *pCommand ) OVERRIDE;
	virtual void OnThink() OVERRIDE;
	virtual void PerformLayout() OVERRIDE;

	virtual void SOCreated( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent ) { UpdateWarStatus( steamIDOwner, pObject, eEvent ); }
	virtual void SOUpdated( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent ) { UpdateWarStatus( steamIDOwner, pObject, eEvent ); }
	virtual void SODestroyed( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent ) { UpdateWarStatus( steamIDOwner, pObject, eEvent ); }

	virtual void SetVisible( bool bVisible ) OVERRIDE;

private:

	enum EJoiningState_t
	{
		NO_ACTION = 0,
		CONFIRM_SIDE_SELECTION,
		ATTEMPTING_TO_JOIN_AND_WAITING_FOR_RESPONSE,
		SUCCESS_RESPONSE_RECIEVED_WAITING_FOR_USER_CONFIRMATION,
		FAILED_RESPONSE_RECIEVED_WAITING_FOR_USER_CONFIRMATION,
	};

	void UpdateWarStatus( const CSteamID & steamIDOwner, const CSharedObject *pObject, ESOCacheEvent eEvent );

	void UpdateUIState();

	float m_flChoseTeamTime;
	war_side_t m_nPendingSide;
	war_side_t m_nLastKnownSide;
	CUtlString m_strSceneAnimName;

	EJoiningState_t m_eJoiningState;
};

#endif //TF_WARINFOPANEL_H