package tk.wlemuel.cotable.utils;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;

import com.nostra13.universalimageloader.core.assist.LoadedFrom;
import com.nostra13.universalimageloader.core.display.BitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageAware;

/**
 * CircleBitmapDisplayer
 *
 * @author Steve Lemuel
 * @version 0.1
 * @desc CircleBitmapDisplayer
 * @created 2015/05/14
 * @updated 2015/05/14
 */
public class CircleBitmapDisplayer implements BitmapDisplayer {

    private float borderWidth = 0;
    private int borderColor;

    public CircleBitmapDisplayer() {
        super();
    }

    public CircleBitmapDisplayer(int borderColor, int borderWidth) {
        super();
        this.borderColor = borderColor;
        this.borderWidth = borderWidth;
    }

    @Override
    public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_4444);

        Canvas canvas = new Canvas(output);

        final int color = 0xff424242;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);

        //--CROP THE IMAGE
        canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2 - 1, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        //--ADD BORDER IF NEEDED
        if (this.borderWidth > 0) {
            final Paint paint2 = new Paint();
            paint2.setAntiAlias(true);
            paint2.setColor(this.borderColor);
            paint2.setStrokeWidth(this.borderWidth);
            paint2.setStyle(Paint.Style.STROKE);
            canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, (float) (bitmap.getWidth() / 2 - Math.ceil(this.borderWidth / 2)), paint2);
        }
        imageAware.setImageBitmap(output);
    }

}