package com.guru.facebook 
{
	import com.adobe.serialization.json.JSONEncoder;
	import com.facebook.commands.stream.PublishPost;
	import com.facebook.events.FacebookEvent;
	import com.facebook.net.FacebookCall;
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.conn.ConnAbstract;
	import com.guru.conn.ConnPath;
	import com.guru.facebook.feed.base.FeedBase;
	import com.guru.utils.Delegate;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class PostFeed
	{
		public static function post(pFeed:FeedBase, pFriendUID_str:String, pSuccessCall:ICall = null, pFailCall:ICall = null):void
		{
			Logger.eddy("* Feed details:");
			Logger.eddy("* target_uid: " + pFriendUID_str);
			Logger.eddy("* namelink: " + pFeed.getNameHref());
			Logger.eddy("* imagelink: " + pFeed.getImageHref());
			Logger.eddy("* picture: " + pFeed.getImage());
			Logger.eddy("* message: " + pFeed.getMessage());
			Logger.eddy("* name: " + pFeed.getName());
			Logger.eddy("* caption: " + pFeed.getCaption());
			Logger.eddy("* description: " + pFeed.getDescription());
			
			if (FacebookDataBridge.allowPublish)
			{	
				doIFramePost(pFeed, pFriendUID_str, pSuccessCall, pFailCall);
			}
			else
			{
				Logger.eddy("DISALLOW PUBLISH ;(");
			}
		}
		
		private static function doIFramePost(pFeed:FeedBase, pTargetUID_str:String, pSuccessCall:ICall = null, pFailCall:ICall = null):void
		{
			Logger.eddy("Post IFrame feed");
			
			var conn:ConnAbstract;
			if(pFeed.hasAttachment() && pTargetUID_str == FacebookDataBridge.getLoggerUid())
				conn = new ConnAbstract(ConnPath.getPublishAttachmentPath());
			else
				conn = new ConnAbstract(ConnPath.getPublishPath());
				
			var successCall:ICall = new FunctionCall(PostFeed, onIFrameSuccess, conn, pSuccessCall, pFailCall);
			var failCall:ICall = new FunctionCall(PostFeed, onIFrameFail, pFailCall);
			conn.setSuccessCall(successCall);
			conn.setFailCall(failCall);
			
			if(pFeed.hasAttachment() && pTargetUID_str == FacebookDataBridge.getLoggerUid())
				conn.send( { target_uid:pTargetUID_str, attachment:pFeed.getAttachmentInString() } );
			else
				conn.send( { target_uid:pTargetUID_str, namelink:pFeed.getNameHref(), imagelink:pFeed.getImageHref(), picture:pFeed.getImage(), message:pFeed.getMessage(), name:pFeed.getName(), caption:pFeed.getCaption(), description:pFeed.getDescription() } );
		}
		
		private static function onIFrameSuccess(pConn:ConnAbstract, pSuccessCall:ICall = null, pFailCall:ICall = null):void
		{
			if(pConn.getXML()..status[0] == "true")
			{
				if (pSuccessCall != null)
					pSuccessCall.execute();
				Logger.eddy("onIFramePublish SUCCESS :)");
			}
			else
			{
				Logger.eddy(pConn.getXML());
				onIFrameFail(pFailCall);
			}
			
		}
		
		private static function onIFrameFail(pFailCall:ICall = null):void
		{
			if (pFailCall != null)
				pFailCall.execute();
			Logger.eddy("onIFramePublish FAIL ;(");
		}
	}

}