package com.anren.omplayer;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by yuejiaoli on 2018/7/4.
 * 清晰度弹框
 */

public class OMPlayerRateView extends RelativeLayout {
    private Context mContext;
    private Callback mCallback;
    private ListView mListView;
    private RateAdapter mAdapter;
    private ArrayList<OMPlayerRate> mList;
    private int mClickPos = -1;

    public OMPlayerRateView(Context context) {
        super(context);
        init(context);
    }

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

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

    private void init(Context context) {
        mContext = context;
        mList = new ArrayList<OMPlayerRate>();
        LayoutInflater.from(mContext).inflate(R.layout.player_rate_popup_view, this);
        mListView = (ListView) findViewById(R.id.rate_options_tc);
        mListView.setDivider(null);
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (mCallback != null) {
                    if (mList != null && mList.size() > 0) {
                        OMPlayerRate rate = mList.get(position);
                        if (rate != null) {
                            mCallback.onRateSelect(rate);
                        }
                    }
                }
                mClickPos = position;
                mAdapter.notifyDataSetChanged();
            }
        });
        mAdapter = new RateAdapter();
        mListView.setAdapter(mAdapter);
    }

    public void setCallback(Callback callback) {
        mCallback = callback;
    }

    public void setVideoRateList(List<OMPlayerRate> list) {
        mList.clear();
        mList.addAll(list);

        if (mAdapter != null) {
            mAdapter.notifyDataSetChanged();
        }
    }

    /**
     * 设置默认选中的清晰度
     *
     * @param position
     */
    public void setDefaultSelectedQuality(int position) {
        if (position < 0) position = 0;
        mClickPos = position;
        mAdapter.notifyDataSetChanged();
    }

    class RateAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return mList.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = new RateItemView(mContext);
            }
            RateItemView itemView = (RateItemView) convertView;
            itemView.setSelected(false);
            OMPlayerRate rate = mList.get(position);
            itemView.setRateName(rate.name);
            if (mClickPos == position) {
                itemView.setSelected(true);
            }
            return itemView;
        }
    }

    class RateItemView extends RelativeLayout {

        private TextView mRateItem;

        public RateItemView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init(context);
        }

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

        public RateItemView(Context context) {
            super(context);
            init(context);
        }

        private void init(Context context) {
            LayoutInflater.from(context).inflate(R.layout.player_rate_item_view, this);
            mRateItem = (TextView) findViewById(R.id.player_rate_item_tc);
        }

        public void setRateName(String rateName) {
            mRateItem.setText(rateName);
        }

        public void setSelected(boolean isChecked) {
            mRateItem.setSelected(isChecked);
            mRateItem.setTypeface(isChecked ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
        }
    }

    public interface Callback {
        void onRateSelect(OMPlayerRate rate);
    }
}
