/**
 * The leaderboard page allows the player to view the highest rated players and update that list.
 */
class LeaderboardPage
{
	constructor(xmppMessages)
	{
		this.openPageHandlers = new Set();
		this.closePageHandlers = new Set();

		this.leaderboardList = new LeaderboardList(xmppMessages);

		this.leaderboardPage = Engine.GetGUIObjectByName("leaderboardPage");

		Engine.GetGUIObjectByName("leaderboardUpdateButton").onPress = this.onPressUpdate.bind(this);
		Engine.GetGUIObjectByName("leaderboardPageBack").onPress = this.onPressClose.bind(this);
	}

	registerOpenPageHandler(handler)
	{
		this.openPageHandlers.add(handler);
	}

	registerClosePageHandler(handler)
	{
		this.closePageHandlers.add(handler);
	}

	openPage()
	{
		this.leaderboardPage.hidden = false;
		Engine.SetGlobalHotkey("cancel", "Press", this.onPressClose.bind(this));
		Engine.SendGetBoardList();

		const playerName = this.leaderboardList.selectedPlayer();
		for (const handler of this.openPageHandlers)
			handler(playerName);
	}

	onPressUpdate()
	{
		Engine.SendGetBoardList();
	}

	onPressClose()
	{
		this.leaderboardPage.hidden = true;

		for (const handler of this.closePageHandlers)
			handler();
	}
}
