#ifndef BOT_MENU_H
#define BOT_MENU_H
#pragma once

namespace NMenu
{
	enum EMenuType
	{
		MainMenuType = 0,

		CustomBotSkillMenuType,
		CustomBotTeamMenuType,
		CustomBotClassMenuType,

		SuperBotMenuType,
		FillServerMenuType,
		AdvancedMenuType,
		ChatMenuType,
		KickBotsMenuType,
		DebugMenuType,

		AIPercentMenuType,
		MeleePercentMenuType,
		TeleportPercentMenuType,
		SwoopPercentMenuType,
		FlyPercentMenuType,
		ChatPercentMenuType,
		WhinePercentMenuType,
		TauntPercentMenuType,
		SwapPercentMenuType,
		DropPercentMenuType,
		TagPercentMenuType,
		LowerPercentMenuType,
		SBotLaserPercentMenuType,

		BotSkillSelectMenuType,
		AggressionLevelMenuType,
		ChatToggleMenuType,
		BotsShootToggleMenuType,
		BotsSearchEnemiesToggleMenuType,
		ObserverToggleMenuType,
		BotsMoveToggleMenuType,
		DiscUsageToggleMenuType,
		BalanceTeamsToggleMenuType
	};

	extern void (*pCurrentMenuFunction)(void);
	extern short CurrentMenuChoice;
	extern short SBotType;
	extern short BotTeam;
	extern short BotSkill;
	extern char *CurrentMenuText;
	extern int CurrentKeySlots;

	void ExecuteMenuCommand(int MenuChoice);
	void ShowMenu(void);
	void ResetMenu(void);
	void SetNewMenu(EMenuType MenuType);

	void MainMenu(void);

	// Menu's from the main menu
	void SuperBotMenu(void);
	void FillServerMenu(void);
	void AdvancedMenu(void);
	void ChatMenu(void);
	void KickMenu(void);
	void DebugMenu(void);

	// Custom add bot menu's
	void CustomBotSkillMenu(void);
	void CustomBotTeamMenu(void);
	void CustomBotClassMenu(void);

	// Percent select menu's
	void AIPercentMenu(void);
	void MeleePercentMenu(void);
	void TeleportPercentMenu(void);
	void SwoopPercentMenu(void);
	void FlyPercentMenu(void);
	void ChatPercentMenu(void);		
	void WhinePercentMenu(void);
	void TauntPercentMenu(void);
	void SwapPercentMenu(void);
	void LowerPercentMenu(void);
	void DropPercentMenu(void);
	void TagPercentMenu(void);
	void SBotLaserPercentMenu(void);

	// Misc menu's
	void BotSkillMenu(void);
	void AggressionLevelMenu(void);
	void ChatToggleMenu(void);
	void BotsShootToggleMenu(void);
	void BotsSearchEnemiesToggleMenu(void);
	void ObserverToggleMenu(void);
	void BotsMoveToggleMenu(void);
	void DiscUsageToggleMenu(void);
	void BalanceTeamsToggleMenu(void);

	short GetPercentFromMenu();


	// Menu texts
	extern const char *MainMenuText;
	extern const char *CustomBotSkillMenuText;
	extern const char *CustomBotTeamMenuText;
	extern const char *CustomBotClassMenuText;
	extern const char *SuperBotMenuText;
	extern const char *FillServerMenuText;
	extern const char *AdvancedMenuText;
	extern const char *ChatMenuText;
	extern const char *KickMenuText;
	extern const char *DebugMenuText;
	extern const char *AIPercentMenuText;
	extern const char *PercentMenuText;
	extern const char *OnOffMenuText;
	extern const char *BotSkillMenuText;
	extern const char *AggressionLevelMenuText;

	// Variabeles containing valid keys for the menu
	extern const int MainMenuKeys;
	extern const int CustomBotSkillMenuKeys;
	extern const int CustomBotTeamMenuKeys;
	extern const int CustomBotClassMenuKeys;
	extern const int SuperBotMenuKeys;
	extern const int FillServerMenuKeys;
	extern const int AdvancedMenuKeys;
	extern const int ChatMenuKeys;
	extern const int KickMenuKeys;
	extern const int DebugMenuKeys;
	extern const int PercentMenuKeys;
	extern const int AIPercentMenuKeys;
	extern const int OnOffMenuKeys;
	extern const int BotSkillMenuKeys;
	extern const int AutoClientMenuKeys;
	extern const int AggressionLevelMenuKeys;

	struct MenuInfo
	{
		short MenuKeySlots; // Which key number slots can be used?
		const char *MenuText; // Menu text
		void (*pMenuFunction)(void); // Function to execute when a choice is made
	};

	// Table containing info for each menu
	extern MenuInfo MenuInfos[];
};

#endif // BOT_MENU_H