package com.chenantao.playtogether.mvc.view.widget;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;

import com.chenantao.playtogether.R;

/**
 * Created by Chenantao_gg on 2016/1/21.
 */
public class SelectRecyclerView extends RecyclerView
{
	public static final int DISPLAY_ITEM_COUNT = 5;//只能同时展示5条数据,注意,只能展示奇数条数据

	public static final int OFFSET_ITEM = 2;//由于业务需求,位置需要与原位置偏差

	private double mMaxTextSize = 30, mMinTextSize = 10;//sp,textview字体大小最大以及最小限制

	private double mMaxTextAlpha = 1, mMinTextAlpha = 0.2;//textview透明度最大以及最小限制

	private Paint mSelectedBorderPaint;//绘制选择框的paint

	private SnappingLinearLayoutManager mLayoutManager;//自定义的布局管理器,可以缓慢滑动到指定位置

	private double mTextSizeScale, mTextAlphaScale;//字体大小以及透明度的梯度值

	public SelectRecyclerView(Context context, AttributeSet attrs)
	{
		super(context, attrs);
		//将dp转换为px
//		mMaxTextSize = (int) DimensionUtils.sp2px(mMaxTextSize, getResources().getDisplayMetrics
//				());
//		mMinTextSize = (int) DimensionUtils.sp2px(mMinTextSize, getResources().getDisplayMetrics
//				());
		mSelectedBorderPaint = new Paint();
		mSelectedBorderPaint.setColor(getResources().getColor(R.color.primary_color));
		mSelectedBorderPaint.setAntiAlias(true);
		mSelectedBorderPaint.setStyle(Paint.Style.STROKE);
		mSelectedBorderPaint.setStrokeWidth(3);
	}


	@Override
	protected void onMeasure(int widthSpec, int heightSpec)
	{
		super.onMeasure(widthSpec, heightSpec);
		int childCount = getChildCount();
		int itemHeight = getMeasuredHeight() / DISPLAY_ITEM_COUNT;
		for (int i = 0; i < childCount; i++)
		{
			View child = getChildAt(i);
			child.getLayoutParams().height = itemHeight;
		}
	}

	@Override
	public void setLayoutManager(LayoutManager layout)
	{
		super.setLayoutManager(layout);
		mLayoutManager = (SnappingLinearLayoutManager) layout;
	}

	@Override
	protected void onLayout(boolean changed, int l, int t, int r, int b)
	{
		super.onLayout(changed, l, t, r, b);
		if (changed)
		{
			int height = getMeasuredHeight();
			//距离中点一半高度的时候textSize为最小
			mTextSizeScale = (mMaxTextSize - mMinTextSize) / (height / 2);
			//距离中点一半高度的时候透明度为最小
			mTextAlphaScale = (mMaxTextAlpha - mMinTextAlpha) / (height / 2);
		}
		if (mLayoutManager != null)
		{
			setItemStyle();
		}
	}

	/**
	 * 在滑动停止的时候设置选中的条目
	 *
	 * @param state
	 */
	@Override
	public void onScrollStateChanged(int state)
	{
		super.onScrollStateChanged(state);
		if (state == SCROLL_STATE_IDLE)
		{
			scrollToSelectedView();
		}
	}

	/**
	 * 滑动到目前选择框选中的item
	 */
	private void scrollToSelectedView()
	{
		//取得中点对应的item,类似于listview的pointToPosition
		View selectView = findChildViewUnder(getMeasuredWidth() / 2, getMeasuredHeight
				() / 2);
		int pos = getChildAdapterPosition(selectView);
		mLayoutManager.smoothScrollToPosition(this, null, pos - ((DISPLAY_ITEM_COUNT - 1) / 2));
	}


	/**
	 * 画出选择框
	 *
	 * @param c
	 */
	@Override
	public void onDraw(Canvas c)
	{
		super.onDraw(c);
		int width = getMeasuredWidth();
		int height = getMeasuredHeight();
		int itemHeight = height / DISPLAY_ITEM_COUNT;
//		Logger.e("height:" + height+",itemheight:"+itemHeight);
		int t = (height - itemHeight) / 2;
		Rect rect = new Rect(0, t, width, t + itemHeight);
		c.drawRect(rect, mSelectedBorderPaint);
	}

	/**
	 * 设置可视recyclerView可视item的属性(字体大小、透明度)
	 */
	public void setItemStyle()
	{
		int firstVisiblePos = mLayoutManager.findFirstVisibleItemPosition();
		int lastVisiblePos = mLayoutManager.findLastVisibleItemPosition();
		int itemHeight = getMeasuredHeight() / DISPLAY_ITEM_COUNT;
		for (int i = firstVisiblePos; i <= lastVisiblePos; i++)
		{
			View view = mLayoutManager.findViewByPosition(i);
			int x = (int) view.getX();
			int y = (int) view.getY();
			//itemCenter:item的中点,相对于parent的y距离
			int itemCenter = y + itemHeight / 2;
			if (itemCenter < 0) itemCenter = 0;
			//distanceToCenter:item的中点距离parent的y距离
			int distanceToCenter = Math.abs(getMeasuredHeight() / 2 - itemCenter);
//			Logger.e("toCenter:" + distanceToCenter + ",testSize:" + (float) (mMaxTextSize -
//					mTextSizeScale * distanceToCenter));
			TextView textview = (TextView) view.findViewById(R.id.tv);
			//距离中点最近的时候透明度最大,字体也最大
			//设置textview字体大小随着距离中点距离的改变而改变
			textview.setTextSize((float) (mMaxTextSize - mTextSizeScale * distanceToCenter));
			//设置textview透明度随着距离中点距离的改变而改变
			textview.setAlpha((float) (mMaxTextAlpha - mTextAlphaScale * distanceToCenter));
		}
	}

	@Override
	public void onScrolled(int dx, int dy)
	{
		super.onScrolled(dx, dy);
		if (mLayoutManager != null)
		{
			setItemStyle();
		}
	}

	public String getSelectItemText()
	{
		View selectView = findChildViewUnder(getMeasuredWidth() / 2, getMeasuredHeight
				() / 2);
		TextView tv = (TextView) selectView.findViewById(R.id.tv);
		return tv.getText().toString();
	}

}