//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef CHARINFO_LOADOUT_SUBPANEL_H
#define CHARINFO_LOADOUT_SUBPANEL_H
#ifdef _WIN32
#pragma once
#endif

#include <game/client/iviewport.h>
#include "vgui_controls/PropertyPage.h"
#include <vgui_controls/Button.h>
#include "tf_controls.h"
#include "tf_shareddefs.h"
#include "item_pickup_panel.h"
#include "backpack_panel.h"
#include "class_loadout_panel.h"
#include "crafting_panel.h"
#include "charinfo_armory_subpanel.h"

#define NUM_CLASSES_IN_LOADOUT_PANEL		(TF_LAST_NORMAL_CLASS-1)		// We don't allow unlockables for the civilian

class CImageButton : public vgui::Button
{
private:
	DECLARE_CLASS_SIMPLE( CImageButton, vgui::Button );

public:
	CImageButton( vgui::Panel *parent, const char *panelName );

	virtual void ApplySettings( KeyValues *inResourceData );
	virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
	virtual void OnSizeChanged( int newWide, int newTall );

	void SetActiveImage( const char *imagename );
	void SetInactiveImage( const char *imagename );
	void SetActiveImage( vgui::IImage *image );
	void SetInactiveImage( vgui::IImage *image );

public:
	virtual void Paint();

private:
	vgui::IImage *m_pActiveImage;	
	char *m_pszActiveImageName;

	vgui::IImage *m_pInactiveImage;
	char *m_pszInactiveImageName;

	bool m_bScaleImage;
	Color m_ActiveDrawColor;
	Color m_InactiveDrawColor;
};

enum charinfo_activepanels_t
{
	CHAP_LOADOUT,
	CHAP_BACKPACK,
	CHAP_CRAFTING,
	CHAP_ARMORY,
};

enum charinfosubbuttons_t
{
	CHSB_BACKPACK,
	CHSB_CRAFTING,
	CHSB_ARMORY,
	CHSB_TRADING,

	CHSB_NUM_BUTTONS
};


//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
class CCharInfoLoadoutSubPanel : public vgui::PropertyPage
{
	DECLARE_CLASS_SIMPLE( CCharInfoLoadoutSubPanel, vgui::PropertyPage );
public:
	CCharInfoLoadoutSubPanel(Panel *parent);
	virtual ~CCharInfoLoadoutSubPanel();

	virtual void	ApplySchemeSettings( vgui::IScheme *pScheme );
	virtual void	OnCommand( const char *command );
	virtual void	PerformLayout( void );
	virtual void	OnCursorMoved( int x, int y );

	void			SetClassIndex( int iClassIndex, bool bOpenClassLoadout );
	void			SetTeamIndex( int iTeamIndex );
	void			OpenToBackpack( void ) { OpenSubPanel( CHAP_BACKPACK ); }
	void			OpenToCrafting( void ) { OpenSubPanel( CHAP_CRAFTING ); }
	void			OpenToArmory( int iItemDef = 0 ) { m_iArmoryItemDef = iItemDef; OpenSubPanel( CHAP_ARMORY ); }
	void			OpenSubPanel( charinfo_activepanels_t iPanel );
	void			UpdateModelPanels( bool bOpenClassLoadout = true );

	CClassLoadoutPanel	*GetClassLoadoutPanel( void ) { return m_pClassLoadoutPanel; }
	CBackpackPanel	*GetBackpackPanel( void ) { return m_pBackpackPanel; }
	CCraftingPanel	*GetCraftingPanel( void ) { return m_pCraftingPanel; }
	CArmoryPanel	*GetArmoryPanel( void ) { return m_pArmoryPanel; }

	void UpdateLabelFromClass( int nClass );
	void UpdateLabelFromSubButton( int nButton );
	virtual void OnTick( void );
	void	RecalculateTargetClassLayout( void );
	void	RecalculateTargetClassLayoutAtPos( int x, int y );
	void MoveCharacterSelection( int nDirection );
	void	OnKeyCodeTyped( vgui::KeyCode code );
	void	OnKeyCodePressed( vgui::KeyCode code );

	bool		 ShouldShowExplanations( void ) { return (m_iShowingPanel == CHAP_LOADOUT && m_iCurrentClassIndex == TF_CLASS_UNDEFINED); }

	charinfo_activepanels_t	GetShowingPanel() const { return m_iShowingPanel; }
	int GetCurrentClassIndex() const	{ return m_iCurrentClassIndex; }

	MESSAGE_FUNC( OnPageShow, "PageShow" );
	MESSAGE_FUNC( OnSelectionStarted, "SelectionStarted" );
	MESSAGE_FUNC( OnSelectionEnded, "SelectionEnded" );
	MESSAGE_FUNC( OnCancelSelection, "CancelSelection" );
	MESSAGE_FUNC( OnOpenCrafting, "OpenCrafting" );
	MESSAGE_FUNC( OnCraftingClosed, "CraftingClosed" );
	MESSAGE_FUNC( OnArmoryClosed, "ArmoryClosed" );
	MESSAGE_FUNC( OnCharInfoClosing, "CharInfoClosing" );

private:
	void		RequestInventoryRefresh();

	CImageButton		*m_pClassButtons[NUM_CLASSES_IN_LOADOUT_PANEL+1];
	CImageButton		*m_pSubButtons[CHSB_NUM_BUTTONS];
	CExLabel			*m_pButtonLabels[CHSB_NUM_BUTTONS];
	int					m_iOverSubButton;
	int					m_iClassLayout[NUM_CLASSES_IN_LOADOUT_PANEL+1][4];
	bool				m_bClassLayoutDirty;
	bool				m_bSnapClassLayout;
	bool				m_bRequestingInventoryRefresh;
	int					m_iCurrentClassIndex;
	int					m_iCurrentTeamIndex;
	charinfo_activepanels_t	m_iShowingPanel;
	charinfo_activepanels_t	m_iPrevShowingPanel;
	CClassLoadoutPanel	*m_pClassLoadoutPanel;
	CBackpackPanel		*m_pBackpackPanel;
	CCraftingPanel		*m_pCraftingPanel;
	CArmoryPanel		*m_pArmoryPanel;
	vgui::Label			*m_pSelectLabel;
	vgui::Label			*m_pLoadoutChangesLabel;
	vgui::Label			*m_pNoSteamLabel;
	vgui::Label			*m_pNoGCLabel;
	vgui::Label			*m_pClassLabel;
	CExLabel			*m_pItemsLabel;
	int					m_iMouseXPos;
	int					m_iMouseYPos;
	int					m_iLabelSetToClass;
	int					m_iClassLabelYPos;
	int					m_iItemLabelYPos;
	Color				m_ItemColorNone;
	Color				m_ItemColor;
	float				m_flStartExplanationsAt;
	int					m_iArmoryItemDef;

	CPanelAnimationVarAliasType( int, m_iSelectLabelY, "selectlabely_default", "0", "proportional_int" );
	CPanelAnimationVarAliasType( int, m_iSelectLabelOnChangesY, "selectlabely_onchanges", "0", "proportional_int" );

	CPanelAnimationVarAliasType( int, m_iClassYPos,	"class_ypos", "0", "proportional_int" );
	CPanelAnimationVarAliasType( int, m_iClassXDelta,  "class_xdelta", "0", "proportional_int" );
	CPanelAnimationVarAliasType( int, m_iClassWideMin, "class_wide_min", "0", "proportional_int" );
	CPanelAnimationVarAliasType( int, m_iClassWideMax, "class_wide_max", "0", "proportional_int" );
	CPanelAnimationVarAliasType( int, m_iClassTallMin, "class_tall_min", "0", "proportional_int" );
	CPanelAnimationVarAliasType( int, m_iClassTallMax, "class_tall_max", "0", "proportional_int" );
	CPanelAnimationVarAliasType( int, m_iClassDistanceMin,	"class_distance_min", "0", "proportional_int" );
	CPanelAnimationVarAliasType( int, m_iClassDistanceMax,	"class_distance_max", "0", "proportional_int" );
};

#endif // CHARINFO_LOADOUT_SUBPANEL_H
