package com.guru.project.test
{
	import com.facebook.commands.photos.AddTag;
	import com.facebook.data.photos.FacebookPhoto;
	import com.facebook.data.photos.PhotoTagCollection;
	import com.facebook.data.photos.TagData;
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.display.LabelPressButton;
	import com.guru.display.ToggleButton;
	import com.guru.drawingPad.DrawingPad;
	import com.guru.facebook.FacebookDataBridge;
	import com.guru.facebook.PostFeed;
	import com.guru.facebookApplicationBase.album.FacebookAlbum;
	import com.guru.facebookApplicationBase.album.PhotoTagger;
	import com.guru.panel.Panel;
	import com.guru.panel.StatusBar;
	import flash.display.BitmapData;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class TestMain
	{
		private var mTimeline_mc:MovieClip;
		private var mFacebookAlbum:FacebookAlbum;
		private var mSubmitBtn:LabelPressButton;
		private var mResetBtn:LabelPressButton;
		
		private var mModeToggleBtn:ToggleButton;
		private var mDrawingPad:DrawingPad;
		private var mPhotoTagger:PhotoTagger;
		
		public function TestMain(pTimeline_mc:MovieClip)
		{
			mTimeline_mc = pTimeline_mc;
			mFacebookAlbum = new FacebookAlbum("testing aya album", "this is description", "this is location", FacebookAlbum.PRIVACY_EVERYONE);
			mFacebookAlbum.init(new FunctionCall(this, onAlbumInitDone));
		}
		
		public function dispose():void
		{
			
		}
		
		private function init():void
		{
			mSubmitBtn = new LabelPressButton(mTimeline_mc.submitBtn_mc);
			mResetBtn = new LabelPressButton(mTimeline_mc.resetBtn_mc);
			
			mSubmitBtn.setPressingStopCall(new FunctionCall(this, onSubmitBtnPress));
			mResetBtn.setPressingStopCall(new FunctionCall(this, onResetBtnPress));
			
			mModeToggleBtn = new ToggleButton(mTimeline_mc.modeToggleBtn_mc);
			
			mDrawingPad = new DrawingPad(mTimeline_mc.drawingPad_mc);
			mPhotoTagger = new PhotoTagger(mTimeline_mc.drawingPad_mc, mTimeline_mc.crossCursor_mc);
			
			mModeToggleBtn.setOffCall(new FunctionCall(this, onModeOn));
			mModeToggleBtn.setOnCall(new FunctionCall(this, onModeOff));
			
			this.onModeOff();
		}
		
		private function onModeOn():void
		{
			mPhotoTagger.startTag();
			mDrawingPad.stopDrawing();
		}
		
		private function onModeOff():void
		{
			mPhotoTagger.stopTag();
			mDrawingPad.startDrawing();
		}
		
		private function onAlbumInitDone():void
		{
			this.init();
		}
		
		private function onSubmitBtnPress():void
		{
			Panel.showStatusBar(StatusBar.LOADING, "Submiting photo...");
			mFacebookAlbum.addPhoto(mDrawingPad.getBMPData(), "this is a testing caption",  new FunctionCall(this, onSumbitPhotoDone));
		}
		
		private function onResetBtnPress():void
		{
			this.clearDrawingPad();
			mPhotoTagger.clear();
		}
		
		private function clearDrawingPad():void
		{
			mDrawingPad.clearAll();
		}
		
		private function onSumbitPhotoDone(pFacebookPhoto:FacebookPhoto = null):void
		{
			if (pFacebookPhoto != null)
			{
				this.tagPhoto(pFacebookPhoto);
			}
		}
		
		private function tagPhoto(pFacebookPhoto:FacebookPhoto):void
		{
			Panel.showStatusBar(StatusBar.LOADING, "Tagging photo...");
			
			mPhotoTagger.setPid(pFacebookPhoto.pid);
			var tagData_array:Array = mPhotoTagger.getTaggedData();
			
			var photoTagCollection:PhotoTagCollection = new PhotoTagCollection();
			
			for (var i:Number = 0; i < tagData_array.length; i++ )
			{
				var tagData:TagData = TagData(tagData_array[i]);
				
				tagData.x = tagData.x/mDrawingPad.getHoriScale();
				tagData.y = tagData.y/mDrawingPad.getVertScale();
								
				photoTagCollection.addPhotoTag(tagData);
			}
			
			mFacebookAlbum.tagPhoto(pFacebookPhoto.pid, FacebookDataBridge.getLoggerUid(), "", 0, 0, photoTagCollection, new FunctionCall(this, onTagPhotoDone));
		}
		
		private function onTagPhotoDone(pTagData:TagData):void
		{
			Panel.showStatusBar(StatusBar.STATUS, "Photo Tagged!");
		}
		
	}

}