package com.abewy.android.apps.klyph.core.imageloader;

import java.net.URLEncoder;
import android.content.Context;
import android.net.Uri;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import com.abewy.android.apps.klyph.core.BaseApplication;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.RequestCreator;

public class ImageLoader
{
	public static boolean		FADE_ENABLED	= true;
	public static final String	FAKE_URI		= "http://www.abc.com/12398752.jpg";
	protected static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";

	public static void initImageLoader(Context context)
	{

	}

	public static void display(ImageView imageView, String uri)
	{
		display(imageView, uri, false, 0, null);
	}

	public static void display(ImageView imageView, String uri, boolean fadeIn)
	{
		display(imageView, uri, fadeIn, 0, null);
	}

	public static void display(ImageView imageView, String uri, int stubImage)
	{
		display(imageView, uri, false, stubImage, null);
	}

	public static void display(ImageView imageView, String uri, boolean fadeIn, int stubImage)
	{
		display(imageView, uri, fadeIn, stubImage, null);
	}

	public static void display(ImageView imageView, String uri, ImageLoaderListener listener)
	{
		display(imageView, uri, false, 0, listener);
	}

	public static void display(ImageView imageView, String uri, boolean fadeIn, int stubImage, ImageLoaderListener listener)
	{
		if (uri == null || uri.length() == 0)
			uri = FAKE_URI;
		
		/*uri = uri.replace("�", URLEncoder.encode("�"));
		uri = uri.replace("�", URLEncoder.encode("�"));
		uri = uri.replace("'", URLEncoder.encode("'"));
		uri = uri.replace("�", URLEncoder.encode("�"));*/
		
		uri = Uri.encode(uri, ALLOWED_URI_CHARS);

		Picasso picasso = Picasso.with(imageView.getContext());
		RequestCreator requestCreator = picasso.load(uri);

		if (stubImage != 0)
		{
			requestCreator.placeholder(stubImage);
			requestCreator.error(stubImage);
		}

		if (!(fadeIn && FADE_ENABLED))
			requestCreator.noFade();

		LayoutParams params = imageView.getLayoutParams();

		if (params.width > 0 && params.height > 0)
		{
			requestCreator.resize(params.width, params.height, true);
		}

		requestCreator.inSampleSize(true);
		requestCreator.into(imageView, listener);
	}

	public static void displayNoScaling(ImageView imageView, String uri, boolean fadeIn, int stubImage, ImageLoaderListener listener)
	{
		if (uri == null || uri.length() == 0)
			uri = FAKE_URI;

		Picasso picasso = Picasso.with(imageView.getContext());
		RequestCreator requestCreator = picasso.load(uri);

		if (stubImage != 0)
		{
			requestCreator.placeholder(stubImage);
			requestCreator.error(stubImage);
		}

		if (!(fadeIn && FADE_ENABLED))
			requestCreator.noFade();

		requestCreator.into(imageView, listener);
	}

	public static void loadImage(String uri, FakeImageLoaderListener listener)
	{
		if (uri == null || uri.length() == 0)
			uri = FAKE_URI;

		Picasso.with(BaseApplication.getInstance()).load(uri).into(listener);
	}

	public static void cancelDisplay(ImageView imageView)
	{
		if (imageView != null)
		{
			Picasso.with(imageView.getContext()).cancelRequest(imageView);
		}
	}

	public static void clearImageCache()
	{
		Picasso.with(BaseApplication.getInstance()).clearCache();
	}
}