package io.kaif.mobile.view.widget;

import android.animation.Animator;
import android.content.Context;
import android.graphics.drawable.InsetDrawable;
import android.util.AttributeSet;
import android.widget.Button;
import io.kaif.mobile.R;
import io.kaif.mobile.model.Vote;
import io.kaif.mobile.view.animation.VoteAnimation;
import io.kaif.mobile.view.graphics.drawable.Triangle;
import io.kaif.mobile.view.util.Views;

public class VoteArticleButton extends Button {

  private Vote.VoteState voteState;

  private OnVoteClickListener onVoteClickListener;

  public VoteArticleButton(Context context) {
    this(context, null);
  }

  public VoteArticleButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
  }

  public VoteArticleButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context);
  }

  private void init(Context context) {
    setBackground(new InsetDrawable(new Triangle(context.getResources()
        .getColor(R.color.vote_state_empty)),
        (int) Views.convertDpToPixel(12, context),
        (int) Views.convertDpToPixel(4, context),
        (int) Views.convertDpToPixel(12, context),
        (int) Views.convertDpToPixel(4, context)));
    voteState = Vote.VoteState.EMPTY;
    setOnClickListener(v -> {
      if (onVoteClickListener != null) {
        Vote.VoteState from = this.voteState;
        Vote.VoteState to = (this.voteState == Vote.VoteState.EMPTY
                             ? Vote.VoteState.UP
                             : Vote.VoteState.EMPTY);
        onVoteClickListener.onVoteClicked(from, to);
      }
    });
  }

  public void setOnVoteClickListener(OnVoteClickListener onVoteClickListener) {
    this.onVoteClickListener = onVoteClickListener;
  }

  public void updateVoteState(Vote.VoteState voteState) {
    this.voteState = voteState;
    showVoteColor(false);
  }

  public void showVoteColor(boolean showAnimation) {
    final Animator animator;
    switch (voteState) {
      case UP: {
        animator = VoteAnimation.voteUpAnimation(this);
        break;
      }
      default:
        animator = VoteAnimation.voteUpReverseAnimation(this);
        break;
    }
    if (!showAnimation) {
      animator.setDuration(0);
    }
    animator.start();
  }
}