/*
 * Copyright (c) 2012 Socialize Inc.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package com.socialize.demo.implementations.actionbar;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import com.socialize.CommentUtils;
import com.socialize.EntityUtils;
import com.socialize.LikeUtils;
import com.socialize.ShareUtils;
import com.socialize.api.action.share.SocialNetworkDialogListener;
import com.socialize.demo.DemoActivity;
import com.socialize.demo.R;
import com.socialize.entity.Entity;
import com.socialize.entity.Like;
import com.socialize.entity.ListResult;
import com.socialize.entity.UserEntityStats;
import com.socialize.error.SocializeException;
import com.socialize.listener.entity.EntityListListener;
import com.socialize.listener.like.LikeAddListener;
import com.socialize.listener.like.LikeDeleteListener;
import com.socialize.networks.PostData;
import com.socialize.networks.SocialNetwork;
import com.socialize.ui.dialog.SafeProgressDialog;

import java.util.List;


/**
 * @author Jason Polites
 *
 */
public class MultiActionBarActivity extends DemoActivity {

	String[] entityKeys = {
			"https://lh5.googleusercontent.com/-oPgrWjOC-6w/T9UWPfl2qoI/AAAAAAAABMQ/KtRKcWwRsJ0/s932/P1010444.JPG",	
			"https://lh6.googleusercontent.com/-Un85-Xa_06o/T9UWOZYzicI/AAAAAAAABMA/tJLz6FhsVe8/s932/P1010252.JPG",
			"https://lh5.googleusercontent.com/-ELoXZoz5xvE/T9UWO8W0Y3I/AAAAAAAABMI/UtqkHFBtEOg/s932/P1010206.JPG"
	};
	
	// Hold local like state
	boolean [] liked = new boolean[]{false, false, false};
	
	
	@Override
	protected void onCreate() {
		
		setContentView(R.layout.actionbar_multi);
		
		// This page has 3 entities
		final Entity entity0 = Entity.newInstance(entityKeys[0], "Machu Picchu");
		final Entity entity1 = Entity.newInstance(entityKeys[1], "Hawaii");
		final Entity entity2 = Entity.newInstance(entityKeys[2], "Waterfall");
		
		final ProgressDialog progress = SafeProgressDialog.show(this);
		
		// Next get the status of all three...
		EntityUtils.getEntities(this, new EntityListListener() {
			
			@Override
			public void onList(ListResult<Entity> result) {
				// We have the results.. iterate and update the UI
				List<Entity> items = result.getItems();
				
				for (Entity entity : items) {
					// locate the UI control corresponding to this entity
					if(entity.getKey().equals(entityKeys[0])) {
						checkLiked(R.id.btnLike0, 0, entity);
					}
					else if(entity.getKey().equals(entityKeys[1])) {
						checkLiked(R.id.btnLike1, 1, entity);
					}
					else if(entity.getKey().equals(entityKeys[2])) {
						checkLiked(R.id.btnLike2, 2, entity);
					}
				}
				
				// Set up the click listeners
				setLikeListener(R.id.btnLike0, 0, entity0);
				setLikeListener(R.id.btnLike1, 1, entity1);
				setLikeListener(R.id.btnLike2, 2, entity2);				
				
				// Setup comment listeners
				setCommentListener(R.id.btnComment0, entity0);
				setCommentListener(R.id.btnComment1, entity1);
				setCommentListener(R.id.btnComment1, entity1);
				
				// Setup share listeners
				setShareListener(R.id.btnShare0, 0, entity0);
				setShareListener(R.id.btnShare1, 1,entity1);
				setShareListener(R.id.btnShare2, 2,entity2);
				
				progress.dismiss();
			}
			
			@Override
			public void onError(SocializeException error) {
				// It's ok if an entity could not be found, it may just not exist yet.
				if(!isNotFoundError(error)) {
					progress.dismiss();
					handleError(MultiActionBarActivity.this, error);
				}
			}
			
		}, entityKeys);
	}
	
	protected void setLikeListener(int viewId, final int index, final Entity entity) {
		final ImageView view = (ImageView) findViewById(viewId);
		view.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(final View v) {
				if(!liked[index]) {
					
					LikeUtils.like((Activity)v.getContext(), entity, new LikeAddListener() {
						
						@Override
						public void onError(SocializeException error) {
							handleError((Activity)v.getContext(), error);
						}
						
						@Override
						public void onCreate(Like result) {
							view.setImageResource(R.drawable.icon_like_hi);
							liked[index] = true;
						}
					});
				}
				else {
					view.setImageResource(R.drawable.icon_like);
					
					LikeUtils.unlike((Activity)v.getContext(), entity.getKey(), new LikeDeleteListener() {
						
						@Override
						public void onError(SocializeException error) {
							view.setImageResource(R.drawable.icon_like_hi);
							handleError((Activity)v.getContext(), error);
						}
						
						@Override
						public void onDelete() {
							liked[index] = false;
						}
					});
				}
			}
		});
	}
	
	protected void setCommentListener(int viewId, final Entity entity) {
		final ImageView view = (ImageView) findViewById(viewId);
		view.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				CommentUtils.showCommentView((Activity) v.getContext(), entity);
			}
		});
	}

	protected void setShareListener(int viewId, final int index, final Entity entity) {
		final ImageView view = (ImageView) findViewById(viewId);
		view.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				ShareUtils.showShareDialog((Activity) v.getContext(), entity, new SocialNetworkDialogListener() {
					@Override
					public boolean onBeforePost(Activity parent, SocialNetwork socialNetwork, PostData postData) {
						postData.getPostValues().put("type", "photo");
						return false;
					}
				}, ShareUtils.DEFAULT);
			}
		});
	}
	
	protected void checkLiked(int viewId, int index, Entity entity) {
		ImageView view = (ImageView) findViewById(viewId);
		// Get the user data from the entity
		UserEntityStats userEntityStats = entity.getUserEntityStats();
		if(userEntityStats != null) {
			
			liked[index] = userEntityStats.isLiked();
			
			if(userEntityStats.isLiked()) {
				view.setImageResource(R.drawable.icon_like_hi);
			}
		}
	}
}
