package chat.rocket.android.widget;

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.FrameLayout;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;

import chat.rocket.android.widget.R;

public class RocketChatAvatar extends FrameLayout {

  private SimpleDraweeView draweeView;

  public RocketChatAvatar(Context context) {
    super(context);
    initialize(context, null);
  }

  public RocketChatAvatar(Context context, AttributeSet attrs) {
    super(context, attrs);
    initialize(context, attrs);
  }

  public RocketChatAvatar(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initialize(context, attrs);
  }

  @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  public RocketChatAvatar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    initialize(context, attrs);
  }

  private void initialize(Context context, AttributeSet attrs) {
    LayoutInflater.from(context)
        .inflate(R.layout.message_avatar, this, true);

    draweeView = (SimpleDraweeView) findViewById(R.id.drawee_avatar);
  }

  public void loadImage(Drawable drawable) {
    final GenericDraweeHierarchy hierarchy = draweeView.getHierarchy();
    hierarchy.setImage(drawable, 100, true); // Is there a better way?
  }

  public void loadImage(String url, Drawable placeholder) {
    final GenericDraweeHierarchy hierarchy = draweeView.getHierarchy();
    hierarchy.setPlaceholderImage(placeholder);
    hierarchy.setFailureImage(placeholder);

    final DraweeController controller = Fresco.newDraweeControllerBuilder()
        .setUri(Uri.parse(url))
        .setAutoPlayAnimations(true)
        .build();
    draweeView.setController(controller);
  }
}