#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__SelectWorldScreen_H__
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__SelectWorldScreen_H__

#include "../Screen.h"
#include "../TweenData.h"
#include "../components/Button.h"
#include "../components/RolledSelectionListH.h"
#include "../../Minecraft.h"
#include "../../../world/level/storage/LevelStorageSource.h"


class SelectWorldScreen;

//
// Scrolling World selection list
//
class WorldSelectionList : public RolledSelectionListH
{
public:
	WorldSelectionList(Minecraft* _minecraft, int _width, int _height);
	virtual void tick();
	void stepLeft();
	void stepRight();

	void commit();
protected:
	virtual int getNumberOfItems();
	virtual void selectItem(int item, bool doubleClick);
	virtual bool isSelectedItem(int item);

	virtual void renderBackground() {}
	virtual void renderItem(int i, int x, int y, int h, Tesselator& t);
	virtual float getPos(float alpha);
	virtual void touched() { mode = 0; }
	virtual bool capXPosition();
private:
	TweenData td;
	void tweenInited();

	int selectedItem;
	int _height;
	LevelSummaryList levels;
	std::vector<StringVector> _descriptions;
	StringVector _imageNames;

	bool hasPickedLevel;
	LevelSummary pickedLevel;

	int stoppedTick;
	int currentTick;
	float accRatio;
	int mode;
	
	friend class SelectWorldScreen;
};

//
// Delete World screen
//
#include "ConfirmScreen.h"
class DeleteWorldScreen: public ConfirmScreen
{
public:
	DeleteWorldScreen(const LevelSummary& levelId);
protected:
	virtual void postResult(bool isOk);
private:
	LevelSummary _level;
};


//
// Select world screen
//
class SelectWorldScreen: public Screen
{
public:
	SelectWorldScreen();
	virtual ~SelectWorldScreen();

	virtual void init();
	virtual void setupPositions();
	virtual void tick();

	virtual bool isIndexValid(int index);
	virtual bool handleBackEvent(bool isDown);
	virtual void buttonClicked(Button* button);
	virtual void keyPressed(int eventKey);

	void render(int xm, int ym, float a);

	// mouse wheel scroll (new in desktop implementation)
	virtual void mouseWheel(int dx, int dy, int xm, int ym);

	bool isInGameScreen();
private:
	void loadLevelSource();
	std::string getUniqueLevelName(const std::string& level);

	Button bDelete;
	Button bCreate;
	Button bBack;
	Button bWorldView;
	WorldSelectionList* worldsList;
	LevelSummaryList levels;

	bool _mouseHasBeenUp;
	bool _hasStartedLevel;
	//LevelStorageSource* levels;
};

#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__SelectWorldScreen_H__*/
