package org.telegram.ui.Components;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.R;
import org.telegram.ui.ActionBar.Theme;

/**
 * Created by grishka on 10.02.17.
 */

public class BetterRatingView extends View{
	private Bitmap filledStar, hollowStar;
	private Paint paint=new Paint();
	private int numStars=5;
	private int selectedRating=0;
	private OnRatingChangeListener listener;

	public BetterRatingView(Context context){
		super(context);
		filledStar=BitmapFactory.decodeResource(getResources(), R.drawable.ic_rating_star_filled).extractAlpha();
		hollowStar=BitmapFactory.decodeResource(getResources(), R.drawable.ic_rating_star).extractAlpha();
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
		setMeasuredDimension(numStars*AndroidUtilities.dp(32)+(numStars-1)*AndroidUtilities.dp(16), AndroidUtilities.dp(32));
	}

	@Override
	protected void onDraw(Canvas canvas){
		for(int i=0;i<numStars;i++){
			paint.setColor(Theme.getColor(i<selectedRating ? Theme.key_calls_ratingStarSelected : Theme.key_calls_ratingStar));
			canvas.drawBitmap(i<selectedRating ? filledStar : hollowStar, i*AndroidUtilities.dp(32+16), 0, paint);
		}
	}

	@Override
	public boolean onTouchEvent(MotionEvent event){
		float offset=AndroidUtilities.dp(-8);
		for(int i=0;i<numStars;i++){
			if(event.getX()>offset && event.getX()<offset+AndroidUtilities.dp(32+16)){
				if(selectedRating!=i+1){
					selectedRating=i+1;
					if(listener!=null)
						listener.onRatingChanged(selectedRating);
					invalidate();
					break;
				}
			}
			offset+=AndroidUtilities.dp(32+16);
		}
		return true;
	}

	public int getRating(){
		return selectedRating;
	}

	public void setOnRatingChangeListener(OnRatingChangeListener l){
		listener=l;
	}

	public static interface OnRatingChangeListener{
		public void onRatingChanged(int newRating);
	}
}
