package com.guru.project.brother.game
{
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.conn.ConnAbstract;
	import com.guru.conn.ConnPath;
	import com.guru.encrypt.GuruEncrypt;
	import com.guru.facebook.FacebookDataBridge;
	import com.guru.utils.TraceUtil;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class GameDataObject
	{
		public static var sItemID_num:Number = 0;
		public static var sFabric_num:Number = -1;
		public static var sClipArt_array:Array = [];
		public static var sLine_str:String = "";
		public static var sCid_num:Number = -1;
		public static var sNumberOfLine_num:Number = 0;
		public static var sTimeLeft_num:Number = 0;
		public static var sScoreGot_num:Number = 0;
		public static var sFinalScore_num:Number = 0;
		
		private static var sRecord_array:Array = [30, 60, 90, 120, 150, 180, 210, 240, -1, 300];
		
		private static var sGiftItemGradeBoundary_array:Array = [	[2600, 2000, 1000, 0],
																	[2800, 2200, 1000, 0],
																	[2600, 2000, 1000, 0],
																	[2100, 1500, 1000, 0],
																	[2800, 2000, 1000, 0],
																	[2500, 2000, 1000, 0],
																	[2200, 1700, 1000, 0],
																	[2800, 2000, 1000, 0],
																	[2700, 2000, 1000, 0],
																	[2300, 1600, 1000, 0]];
		
		public function GameDataObject() 
		{
			
		}
		
		public static function getItemDataInString():String
		{
			var data_str:String = "";
			
			data_str = sItemID_num + ";" + sFabric_num + ";";
			
			for (var i:Number = 0; i < sClipArt_array.length; i++ )
			{
				var temp_str:String = "";
				for (var j:Number = 0; j < sClipArt_array[i].length; j++ )
				{
					temp_str = temp_str + sClipArt_array[i][j] + ",";
				}
				temp_str = temp_str.substr(0, temp_str.length - 1);
				data_str = data_str + temp_str + "/";
			}
			if(data_str.charAt(data_str.length-1) == "/")
				data_str = data_str.substr(0, data_str.length - 1);
			
			data_str = data_str + ";" + sLine_str;
			//trace("getItemDataInString: " + data_str);
			return data_str;
		}
		
		public static function update(pDoneCall:ICall = null):void
		{
			sRecord_array = new Array();
			
			var conn:ConnAbstract = new ConnAbstract(ConnPath.getGetGameRecordPath());
			conn.setSuccessCall(new FunctionCall(GameDataObject, onGetGameRecordSuccess, conn, pDoneCall));
			var param_str:String = FacebookDataBridge.getLoggerUid();
			Logger.alex(conn.getPath() + ": " + param_str);
			conn.send({data:GuruEncrypt.encrypt(param_str)});
		}
		
		private static function onGetGameRecordSuccess(pConn:ConnAbstract, pDoneCall:ICall = null):void
		{
			if (pConn.getXML()..status[0] == "true")
			{
				for (var i:Number = 0; i < pConn.getXML()..item.length(); i++ )
				{
					sRecord_array[Number(pConn.getXML()..item[i].id[0])] = new Array();
					sRecord_array[Number(pConn.getXML()..item[i].id[0])]["score"] = Number(pConn.getXML()..item[i].score[0]);
					sRecord_array[Number(pConn.getXML()..item[i].id[0])]["completed"] = Number(pConn.getXML()..item[i].completed[0]);
					
				}
			}
			TraceUtil.printArray(sRecord_array);
			if (pDoneCall)
				pDoneCall.execute();
		}
		
		public static function isItem10Unlocked():Boolean
		{
			if (sRecord_array == null)
			{
				sRecord_array = new Array();
				for (var i:Number = 0; i < 10; i++ )
				{
					sRecord_array.push(0);
				}
			}
			
			TraceUtil.printArray(sRecord_array);
			
			var unlocked_bol:Boolean = false;
			var completeCount_num:Number = 0;
			for (i = 0; i < sRecord_array.length - 1; i++ )
			{
				trace(sRecord_array[i]["score"] + " >= " + sGiftItemGradeBoundary_array[i][2]);
				if (sRecord_array[i]["completed"] == 1 && sRecord_array[i]["score"] >= sGiftItemGradeBoundary_array[i][2])
					completeCount_num++;
			}
			
			if (completeCount_num >= 9)
				unlocked_bol = true;
				
			return unlocked_bol;
		}
		
		public static function setCompleteForSpecificItem(pGiftItemID_num:Number):void
		{
			sRecord_array[pGiftItemID_num]["completed"] = 1;
		}
		
		public static function getScoreForSpecificItem(pGiftItemID_num:Number):Number
		{
			return Number(sRecord_array[pGiftItemID_num]["score"]);
		}
		
		public static function getGradeForSpecificItem(pGiftItemID_num:Number, pTotalScore_num:Number):Number
		{
			for (var i:Number = 0; i < sGiftItemGradeBoundary_array[pGiftItemID_num].length; i++ )
			{
				if (pTotalScore_num >= sGiftItemGradeBoundary_array[pGiftItemID_num][i])
					break;
			}	
			
			if (sRecord_array[pGiftItemID_num]["completed"] == 0)
				return 4;
			
			if (pGiftItemID_num == 9 && !isItem10Unlocked())
				return 4;
			
			return i;
		}
		
		public static function reset():void
		{
			trace("--- GameDataObject RESET ---");
			sItemID_num = 0;
			sFabric_num = -1;
			sCid_num = -1;
			sTimeLeft_num = 0;
			sScoreGot_num = 0;
			sFinalScore_num = 0;
			sNumberOfLine_num = 0;
			
			sClipArt_array = new Array();
			sLine_str = "";
		}
		
	}

}