var Result = {

	preload: function() {
		game.load.image('icon_fullscreen', '../../../resources/image/icon/fullscreen_white.png');

		if(isTypingPracticeApp() || isTypingTestApp())
			Animal.loadResources();

		RankingBoard.loadResources();
		game.load.image('star', '../../../resources/image/ui/star_particle.png');
	},

	create: function() {
		this.dbConnectManager = new DBConnectManager();

		this.game.stage.backgroundColor = '#4d4d4d';
		this.chartGraphics = game.add.graphics(100, game.world.height - 120);

		// keyboard shortcut
		this.keyboardShortcut = new KeyboardShortcut();
		this.keyboardShortcut.addCallback(
			Phaser.KeyCode.ESC,	// keyCode
			null,	// keyDownHandler
			(function() { this.back(); }).bind(this),	// keyUpHandler
			"result"	// callerClassName
		);
		this.keyboardShortcut.addCallback(
			Phaser.KeyCode.ENTER,	// keyCode
			null,	// keyDownHandler
			(function() { this.restartStage(); }).bind(this),	// keyUpHandler
			"result"	// callerClassName
		);

		// top ui
		var screenTopUI = new ScreenTopUI();
		screenTopUI.makeBackButton( (function() { this.back(); }).bind(this) );
		screenTopUI.makeFullScreenButton();


		// contents
		this.printRecord();
		// if(sessionStorageManager.getMaestroAccountType() < 100) {	// experience account
		// 	this.updateResultRecord();
		// }

		this.makeRestartButton();


		if(sessionStorageManager.getMaestroAccountType() >= 100) {	// experience account
			var recordBoard = new RecordBoard(RecordBoard.TYPE_SAMPLE);
			this.announceBox = new AnnounceBox(50, 648);
			this.announceBox.drawBox("체험 계정에서는 기록이 저장되지 않습니다.");
		} else {
			this.printTodayBestRecord();
			var recordBoard = new RecordBoard(RecordBoard.TYPE_DB);
		}


		// bottom ui
		var screenBottomUI = new ScreenBottomUI();
		screenBottomUI.printLeftTextWithAppHighestRecord(sessionStorageManager.getAppHighestRecord());
		screenBottomUI.printCenterText(sessionStorageManager.getPlayingAppKoreanName());
		screenBottomUI.printRightText(sessionStorageManager.getPlayerName());
	},


	back: function() {
		if(isTypingPracticeApp())
			location.href = '../../web/client/menu_typing_practice.html';
		else if(isTypingTestApp())
			location.href = '../../web/client/menu_typing_test.html';
		else
			location.href = '../../web/client/menu_app.html';

		sessionStorageManager.resetPlayingAppData();
	},

	printRecord: function() {
		var style = { font: "bold 38px Arial", fill: "#fff", align: "left", boundsAlignH: "center", boundsAlignV: "middle" };
		var titleText = game.add.text(game.world.width / 2, 35, "결과", style);
		titleText.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2);
		titleText.anchor.set(0.5);


		var x = game.world.width / 2;
		var y = 150;
		if(sessionStorageManager.getRecord() === null)
			sessionStorageManager.setRecord(0);

		if(isTypingPracticeApp() || isTypingTestApp()) {
			var animalLevelID = 0;
			if(isTypingPracticeApp())
				animalLevelID = Animal.animalLevelIDByRecord(sessionStorageManager.getRecord(), Animal.TYPE_PRACTICE);
			else	// Typing Test App
				animalLevelID = Animal.animalLevelIDByRecord(sessionStorageManager.getRecord(), Animal.TYPE_TEST);

			var leftAnimal = new Animal(Animal.TYPE_ANIMATION, animalLevelID, game.world.centerX - 200, 150);
			leftAnimal.startAnimation(Animal.SPECIES_DATA[animalLevelID]);

			var rightAnimal = new Animal(Animal.TYPE_ANIMATION, animalLevelID, game.world.centerX + 200, 150);
			rightAnimal.startAnimation(Animal.SPECIES_DATA[animalLevelID]);
		}

		var record = sessionStorageManager.getRecord();
		style.font = "80px Arial";
		var scoreText = game.add.text(
			x, y,
			RecordUtil.getRecordValueWithUnit(record, sessionStorageManager.getPlayingAppID()),
			style
		);
		scoreText.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2);
		scoreText.anchor.set(0.5);
	},

	printTodayBestRecord: function() {
		var newRecordEmitter = game.add.emitter(game.world.centerX, 140, 300);
		newRecordEmitter.makeParticles('star');
		newRecordEmitter.gravity = 300;

		var style = { font: "32px Arial", fill: "#ff0", align: "left", boundsAlignH: "center", boundsAlignV: "middle" };
		var bestRecordText = game.add.text(game.world.centerX, 220, "", style);
		bestRecordText.anchor.set(0.5);
		bestRecordText.stroke = "#333";
		bestRecordText.strokeThickness = 5;

		if(sessionStorageManager.getAppHighestRecord() == 'undefined' || sessionStorageManager.getAppHighestRecord() == null)
			sessionStorageManager.setAppHighestRecord(0);

		var todayBestRecord = 0;
		var flooredBestRecord = Math.floor(sessionStorageManager.getAppHighestRecord());
		var bestRecordWithCommas = NumberUtil.numberWithCommas(flooredBestRecord);

		if(sessionStorageManager.getRecord() > sessionStorageManager.getAppHighestRecord()) {
			sessionStorageManager.setAppHighestRecord(sessionStorageManager.getRecord());

			bestRecordText.text = "! : .  최고 기록 경신  . : !";
			newRecordEmitter.start(true, 2000, null, 20);
		} else {
			bestRecordText.text = "";
		}
	},

	updateResultRecord: function() {
		this.dbConnectManager.updateResultRecord(
			sessionStorageManager.getMaestroID(),
			sessionStorageManager.getPlayerID(),
			sessionStorageManager.getPlayingAppID(),
			sessionStorageManager.getRecord()
		);
	},

	makeRestartButton: function() {
		var setting = new RoundRectButtonSetting(game.world.centerX, game.world.height / 2 - 70, 200, 100);
		setting.fontStyle.fontWeight = "bold";

		var startButton = new RoundRectButton(setting, RoundRectButton.NONE_ICON, "다시 시작", this.restartStage);
		startButton.addShortcutText("Enter");
	},


	restartStage: function() {
		location.href = "../../web/client/" + getGameAppName() + ".html";
	}

}