enum ScreenWidthType
{
	NARROW,
	MEDIUM,
	WIDE
}

class InventoryMenu extends UIScriptedMenu
{
	ref Inventory						m_Inventory;
	private ref ContextMenu				m_context_menu;
	protected bool						m_IsOpened;
	protected bool						m_OnlyFirstTime;
	protected int  						m_LastDisplayLanguage;
	
	protected static ScreenWidthType	m_WidthType;
	protected static int				m_Width;
	protected static int				m_Height;
	
	void InventoryMenu()
	{
		CheckWidth();
		m_Inventory = new Inventory(null);
		m_Inventory.Reset();
		m_Inventory.UpdateInterval();
		m_context_menu = new ContextMenu();
		m_LastDisplayLanguage = g_Game.GetCurrentDisplayLanguageIdx();
	}
	
	override Widget Init()
	{
		m_Inventory.Init();
		m_context_menu.Init(layoutRoot);
		layoutRoot = m_Inventory.GetMainWidget();
		return layoutRoot;
	}
	
	void CheckWidth()
	{
		GetScreenSize( m_Width, m_Height );
		
		if( m_Height > 0 )
		{
			float ratio = m_Width / m_Height;
			if( ratio > 1.75 )
				m_WidthType = ScreenWidthType.WIDE;
			else if( ratio > 1.5 )
				m_WidthType = ScreenWidthType.MEDIUM;
			else
				m_WidthType = ScreenWidthType.NARROW;
		}
	}
	
	static ScreenWidthType GetWidthType()
	{
		return m_WidthType;
	}
	
	static int GetWidth()
	{
		return m_Width;
	}
	
	static int GetHeight()
	{
		return m_Height;
	}
	
	static float GetHeightMultiplied( float value )
	{
		float height = m_Height;
		return height / 1080 * value;
	}
	
	void RefreshQuickbar()
	{
		m_Inventory.RefreshQuickbar();
	}
	
	override ContextMenu GetContextMenu()
	{
		return m_context_menu;
	}

	void InitContainers(EntityAI target)
	{
		
	}
	
	override void Update( float timeslice )
	{
		if( m_Inventory )
		{
			m_Inventory.Update(timeslice);
		}
	}
	
	override void Refresh()
	{
		super.Refresh();
		
		m_Inventory.UpdateConsoleToolbar();
	}

	override void OnShow()
	{
		super.OnShow();
		m_IsOpened = true;
		PPERequesterBank.GetRequester(PPERequesterBank.REQ_INVENTORYBLUR).Start();
		VicinityItemManager.GetInstance().RefreshVicinityItems();
		
		if(m_Inventory)
			m_Inventory.OnShow();
		
		SetFocus( layoutRoot );
		
		MissionGameplay mission = MissionGameplay.Cast( GetGame().GetMission() );
		if( mission )
		{
			mission.MoveHudForInventory( true );
		}
		
		ItemManager.GetInstance().SetItemMicromanagmentMode( false );
		ItemManager.GetInstance().SetSelectedItemEx(null, null, null);

		m_Inventory.Refresh();
	}
	
	override bool OnController( Widget w, int control, int value )
	{
		if( m_IsOpened )
			return m_Inventory.Controller( w, control, value );
		return false;
	}
	
	bool IsOpened()
	{
		return m_IsOpened;
	}

	override void OnHide()
	{
		super.OnHide();
		m_context_menu.Hide();
		m_IsOpened = false;
		PPERequesterBank.GetRequester(PPERequesterBank.REQ_INVENTORYBLUR).Stop();
		if(m_Inventory)
			m_Inventory.OnHide();
		MissionGameplay mission = MissionGameplay.Cast(GetGame().GetMission());
		if(mission)
		{
			mission.MoveHudForInventory( false );
		}
		
		ItemManager.GetInstance().SetItemMicromanagmentMode( false );
		ItemManager.GetInstance().SetSelectedItemEx(null, null, null);
		ItemManager.GetInstance().HideTooltip();
	}
	
	int GetLastDisplayLanguage()
	{
		return m_LastDisplayLanguage;
	}
	
	bool LanguageChanged()
	{
		return g_Game.GetCurrentDisplayLanguageIdx() != m_LastDisplayLanguage;
	}
	
	override void OnPlayerDeath()
	{
		super.OnPlayerDeath();
		MissionGameplay mission = MissionGameplay.Cast(GetGame().GetMission());
		if (mission)
		{
			mission.HideInventory();
		}
	}
}
