package com.frankzhu.recyclerviewdemo.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import com.frankzhu.recyclerviewdemo.R;
import com.frankzhu.recyclerviewdemo.adapter.DefaultMultipleAdapter;
import com.frankzhu.recyclerviewdemo.adapter.MultiSettingSelectAdapter;
import com.frankzhu.recyclerviewdemo.view.DividerItemDecoration;

import java.util.ArrayList;
import java.util.Collections;

import butterknife.Bind;
import butterknife.ButterKnife;

/**
 * Author:    ZhuWenWu
 * Version    V1.0
 * Date:      15/9/15 上午12:10
 * Description:
 * Modification  History:
 * Date         	Author        		Version        	Description
 * -----------------------------------------------------------------------------------
 * 15/9/15      ZhuWenWu            1.0                    1.0
 * Why & What is modified:
 */
public class MultipleSelectFragment extends Fragment {
    @Bind(R.id.recycler_view)
    RecyclerView mRecyclerView;
    private DefaultMultipleAdapter mDefaultMultipleAdapter;

    public MultipleSelectFragment() {

    }

    public static MultipleSelectFragment newInstance() {
        return new MultipleSelectFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_normal, container, false);
        ButterKnife.bind(this, rootView);
        return rootView;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));//这里用线性显示 类似于list view
        mDefaultMultipleAdapter = new DefaultMultipleAdapter(getActivity());
        ArrayList<String> items = new ArrayList<>();
        Collections.addAll(items, getActivity().getResources().getStringArray(R.array.titles));
        mDefaultMultipleAdapter.addItems(items);
        mRecyclerView.setAdapter(mDefaultMultipleAdapter);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayout.VERTICAL));
        mDefaultMultipleAdapter.setOnActionModeCallBack(new MultiSettingSelectAdapter.OnActionModeCallBack() {
            @Override
            public void showActionMode() {
                mDefaultMultipleAdapter.setIsActionModeShow(true);
                AppCompatActivity activity = (AppCompatActivity) getActivity();
                activity.startSupportActionMode(mDeleteMode);
            }
        });
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.unbind(this);
    }

    private ActionMode.Callback mDeleteMode = new ActionMode.Callback() {
        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode actionMode) {
            mDefaultMultipleAdapter.setIsActionModeShow(false);
        }

        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            getActivity().getMenuInflater().inflate(R.menu.menu_delete, menu);
            return true;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            switch (menuItem.getItemId()) {
                case R.id.action_delete:
                    onDeleteItems();
                    actionMode.finish();
                    return true;
                default:
                    break;
            }
            return false;
        }
    };

    private void onDeleteItems() {
        ArrayList<String> deleteItems = new ArrayList<>();
        for (Integer integer : mDefaultMultipleAdapter.getMultiSelectPositions()) {
            deleteItems.add(mDefaultMultipleAdapter.getItemData(integer));
            mDefaultMultipleAdapter.notifyItemRemoved(integer);
        }
        if (deleteItems.size() > 0) {
            mDefaultMultipleAdapter.getDataList().removeAll(deleteItems);
        }
    }
}