package com.d.lib.common.view.popup;

import android.app.Activity;
import android.content.Context;
import android.support.annotation.IdRes;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.PopupWindow;

import com.d.lib.common.R;
import com.d.lib.common.util.DimenUtils;
import com.d.lib.xrv.adapter.CommonAdapter;
import com.d.lib.xrv.adapter.CommonHolder;

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

public class MenuPopup extends AbstractPopup {
    protected List<Bean> datas;
    protected OnMenuListener listener;

    public MenuPopup(Context context, List<Bean> datas) {
        super(context, R.layout.lib_pub_popup_menu,
                DimenUtils.dp2px(context, 135),
                datas != null ? datas.size() * DimenUtils.dp2px(context, 40) + DimenUtils.dp2px(context, 6) : 0, true, -1);
        this.datas = datas != null ? datas : new ArrayList<Bean>();
        initView(mRootView);
    }

    private RecyclerView.Adapter getAdapter() {
        return new SheetAdapter(mContext, datas, R.layout.lib_pub_adapter_popup_menu);
    }

    @Override
    protected void init() {

    }

    private void initView(View rootView) {
        initRecyclerList(rootView, R.id.rv_list, LinearLayoutManager.VERTICAL);
    }

    protected void initRecyclerList(View rootView, @IdRes int id, int orientation) {
        RecyclerView list = (RecyclerView) rootView.findViewById(id);
        LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
        layoutManager.setOrientation(orientation);
        list.setLayoutManager(layoutManager);
        list.setAdapter(getAdapter());
    }

    @Override
    public void show() {
        super.show();
    }

    @Override
    public void showAsDropDown(View anchor) {
        if (!isShowing() && mContext != null && !((Activity) mContext).isFinishing()) {
            super.showAsDropDown(anchor, -DimenUtils.dp2px(mContext, 135 - 45), 0);
        }
    }

    protected void onItemClick(int position, String item) {
        dismiss();
        if (listener != null) {
            listener.onClick(this, position, item);
        }
    }

    public class SheetAdapter extends CommonAdapter<Bean> {
        SheetAdapter(Context context, List<Bean> datas, int layoutId) {
            super(context, datas, layoutId);
        }

        @Override
        public void convert(final int position, CommonHolder holder, final Bean item) {
            holder.setViewVisibility(R.id.v_menu_line, position != 0 ? View.VISIBLE : View.GONE);
            holder.setText(R.id.tv_menu_item, item.item);
            holder.setTextColor(R.id.tv_menu_item, ContextCompat.getColor(mContext, item.color));
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onItemClick(position, item.item);
                }
            });
        }
    }

    public static class Bean {
        public String item;
        public int color;
        public boolean isChecked;

        public Bean(String item, int color, boolean isChecked) {
            this.item = item;
            this.color = color;
            this.isChecked = isChecked;
        }
    }

    public interface OnMenuListener {

        /**
         * Click item
         *
         * @param position From 0 to datas.size()-1;
         */
        void onClick(PopupWindow popup, int position, String item);
    }

    public void setOnMenuListener(OnMenuListener listener) {
        this.listener = listener;
    }
}