package com.guru.project.brother.game.resultStep 
{
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.conn.ConnAbstract;
	import com.guru.conn.ConnPath;
	import com.guru.display.button.LabelButton;
	import com.guru.display.Text;
	import com.guru.encrypt.GuruEncrypt;
	import com.guru.facebook.FacebookDataBridge;
	import com.guru.facebook.feed.AfterGameFeed;
	import com.guru.facebook.PostFeed;
	import com.guru.facebookApplicationBase.gameBase.GameStepBase;
	import com.guru.facebookApplicationBase.message.Message;
	import com.guru.facebookApplicationBase.tracking.Tracking;
	import com.guru.panel.Panel;
	import com.guru.panel.StatusBar;
	import com.guru.project.brother.game.GameDataObject;
	import com.guru.project.brother.game.item.GiftItem;
	import com.guru.section.Section;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class GameSectionResultStep extends GameStepBase
	{
		private var mScore:Text;
		private var mTime:Text;
		private var mTotal:Text;
		private var mStopBtn:LabelButton;
		private var mNextBtn:LabelButton;
		private var mReplayBtn:LabelButton;
		private var mIntroBtn:LabelButton;
		private var mMedal_mc:MovieClip;
		private var mItem:GiftItem;
		private var mConn:ConnAbstract;
		
		public function GameSectionResultStep(pTimeline_mc:MovieClip, pNextCall:ICall = null, pPrevCall:ICall = null, pData_obj:Object = null)
		{
			super(pTimeline_mc, pNextCall, pPrevCall, pData_obj);
			
			Tracking.getInstance().track("GameSection_ResultStep");
			
			if (mData_obj["win"])
				GameDataObject.setCompleteForSpecificItem(GameDataObject.sItemID_num);
				
			mStopBtn = new LabelButton(mTimeline_mc.stopBtn_mc);
			mNextBtn = new LabelButton(mTimeline_mc.nextBtn_mc);
			mReplayBtn = new LabelButton(mTimeline_mc.replayBtn_mc);
			mIntroBtn = new LabelButton(mTimeline_mc.introBtn_mc);
			
			mItem = new GiftItem(mTimeline_mc.item_mc);
			mItem.changeFabricTo(GameDataObject.sFabric_num, null, true);
			mItem.changeItemTo(GameDataObject.sItemID_num);
			mItem.setDataInStringFormat(GameDataObject.getItemDataInString());
			
			mStopBtn.setPressCall(new FunctionCall(this, onStopBtnPress));
			mNextBtn.setPressCall(new FunctionCall(this, onNextBtnPress));
			mReplayBtn.setPressCall(new FunctionCall(this, onReplayBtnPress));
			mIntroBtn.setPressCall(new FunctionCall(this, onIntroBtnPress));
			
			mScore = new Text(mTimeline_mc.score_mc);
			mTime = new Text(mTimeline_mc.time_mc);
			mTotal = new Text(mTimeline_mc.total_mc);
			mMedal_mc = mTimeline_mc.medal_mc;
			
			mScore.setText(GameDataObject.sScoreGot_num);
			mTime.setText(GameDataObject.sTimeLeft_num);
			mTotal.setText(0);
			
			GameDataObject.sFinalScore_num = GameDataObject.sScoreGot_num + GameDataObject.sTimeLeft_num * 10;
			
			Logger.eddy("Get grade for item(" + GameDataObject.sItemID_num + ", " + GameDataObject.sFinalScore_num + ") = " + GameDataObject.getGradeForSpecificItem(GameDataObject.sItemID_num, GameDataObject.sFinalScore_num));
			mMedal_mc.gotoAndStop(GameDataObject.getGradeForSpecificItem(GameDataObject.sItemID_num, GameDataObject.sFinalScore_num) + 1);
			
			mTimeline_mc.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
			mTimeline_mc.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);
			
			mConn = new ConnAbstract(ConnPath.getSubmitGameResultPath(), new FunctionCall(this, onSubmitGameResultSuccess), new FunctionCall(this, onSubmitGameResultFail));
			this.submitGameResult();
		}
		
		private function onSubmitGameResultSuccess():void
		{
			if (mConn.getXML()..status[0] == "true")
			{
				GameDataObject.sCid_num = Number(mConn.getXML()..cid[0]);
				
				if (mData_obj["win"])
				{
					PostFeed.post(new AfterGameFeed(), FacebookDataBridge.getLoggerUid());
				}
				GameDataObject.update(new FunctionCall(Panel, Panel.hideStatusBar));
			}
			else
			{
				this.onSubmitGameResultFail();
			}
		}
		
		private function onSubmitGameResultFail():void
		{
			Panel.showStatusBar(StatusBar.LOADING, Message.GENERIC_ERROR, new FunctionCall(this, submitGameResult));
		}
		
		private function submitGameResult():void
		{
			var win_num:Number = 0;
			
			if (mData_obj["win"])
			{
				win_num = 1;
			}
			
			var param_str:String = FacebookDataBridge.getLoggerUid() + "|" + GameDataObject.sCid_num + "|" + GameDataObject.sNumberOfLine_num + "|" + GameDataObject.sItemID_num + "|" + win_num + "|" + GameDataObject.sTimeLeft_num + "|" + GameDataObject.sScoreGot_num + "|" + GameDataObject.sFinalScore_num + "|" + GameDataObject.getItemDataInString();
			Logger.alex(mConn.getPath() + ": " + param_str);
			mConn.send( { data:GuruEncrypt.encrypt(param_str) } );
			Panel.showStatusBar(StatusBar.LOADING, Message.GENERIC_LOADING);
		}
		
		override public function dispose():void 
		{
			this.onStopBtnPress();
			
			mItem.dispose();
			mStopBtn.dispose();
			mNextBtn.dispose();
			mReplayBtn.dispose();
			mIntroBtn.dispose();
			
			mScore.dispose();
			mTime.dispose();
			mTotal.dispose();
			
			super.dispose();
		}
		
		private function onNextBtnPress():void
		{
			mNextStepCall.execute();
		}
		
		private function onReplayBtnPress():void
		{
			mPreviousStepCall.execute();
		}
		
		private function onIntroBtnPress():void
		{
			Section.changeSection("game");
		}
		
		private function onMouseDownHandler(e:MouseEvent):void
		{
			mStopBtn.onPress();
		}
		
		private function onStopBtnPress():void
		{
			mTime.setText(0);
			mScore.setText(0);
			mTotal.setText(GameDataObject.sFinalScore_num);
			
			mTimeline_mc.stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);
			mTimeline_mc.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
		}
		
		private function onEnterFrameHandler(e:Event):void
		{
			if (Number(mScore.getText()) > 0)
			{
				mScore.setText(Number(mScore.getText()) - 1);
				mTotal.setText(Number(mTotal.getText()) + 1);
			}
			else if (Number(mTime.getText()) > 0)
			{
				var newCurrentScore_num:Number = Number(mTime.getText());
				newCurrentScore_num = (newCurrentScore_num * 10 - 1) / 10;
				var newCurrentScore_str:String = newCurrentScore_num.toString();
				if (newCurrentScore_str.indexOf(".") == -1)
				{
					newCurrentScore_str = newCurrentScore_str + ".0";
				}
				newCurrentScore_str = newCurrentScore_str.substring(0, newCurrentScore_str.indexOf(".") + 2);
				mTime.setText(newCurrentScore_str);
				mTotal.setText(Number(mTotal.getText()) + 10);
			}
			else
			{
				this.onMouseDownHandler(null);
			}
		}
		
	}

}