package com.ihewro.focus.fragemnt;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.blankj.ALog;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.callback.ItemDragAndSwipeCallback;
import com.chad.library.adapter.base.listener.OnItemDragListener;
import com.ihewro.focus.R;
import com.ihewro.focus.adapter.FeedFolderListAdapter;
import com.ihewro.focus.bean.EventMessage;
import com.ihewro.focus.bean.FeedFolder;
import com.ihewro.focus.bean.FeedItem;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.litepal.LitePal;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * A simple {@link Fragment} subclass.
 */
public class FeedFolderListManageFragment extends Fragment {

    @BindView(R.id.recycler_view)
    RecyclerView recyclerView;
    Unbinder unbinder;

    FeedFolderListAdapter adapter;
    private List<FeedFolder> feedFolders;
    /**
     * 新建一个新的碎片
     *
     * @return 返回实例
     */
    public static FeedFolderListManageFragment newInstance() {
        FeedFolderListManageFragment fragment = new FeedFolderListManageFragment();
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_feed_folder_list_manage, container, false);
        unbinder = ButterKnife.bind(this, view);
        EventBus.getDefault().register(this);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        createRecyclerView();
        initListener();
    }


    private void initListener(){
        // 拖拽排序事件
        OnItemDragListener onItemDragListener = new OnItemDragListener() {
            int start = 0;
            int end = 0;
            @Override
            public void onItemDragStart(RecyclerView.ViewHolder viewHolder, int pos){
                start = pos;
                ALog.d("开始" + pos);
            }
            @Override
            public void onItemDragMoving(RecyclerView.ViewHolder source, int from, RecyclerView.ViewHolder target, int to) {
                ALog.d("开始" + from + " || 目标" + to);

            }
            @Override
            public void onItemDragEnd(RecyclerView.ViewHolder viewHolder, int pos) {
                //修改表情中表情包权值,移动的表情包权值 = 移动后的位置
                ALog.d("结束" + pos);
                end = pos;//结果的位置
                if (end!=0 && end!=feedFolders.size()-1){
                    feedFolders.get(end).setOrderValue((feedFolders.get(end-1).getOrderValue() + feedFolders.get(end+1).getOrderValue())*1.0/2);
                }else {
                    if (end == 0){
                        feedFolders.get(end).setOrderValue(feedFolders.get(1).getOrderValue()*1.0/2);
                    }else {
                        feedFolders.get(end).setOrderValue(feedFolders.get(end -1).getOrderValue() + 1);
                    }
                }
                feedFolders.get(end).save();//保存到数据库

                EventBus.getDefault().post(new EventMessage(EventMessage.ORDER_FOLDER));
            }

        };
        // 开启拖拽
        ItemDragAndSwipeCallback itemDragAndSwipeCallback = new ItemDragAndSwipeCallback(adapter);
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemDragAndSwipeCallback);
        itemTouchHelper.attachToRecyclerView(recyclerView);
        adapter.enableDragItem(itemTouchHelper, R.id.move_logo, true);
        adapter.setOnItemDragListener(onItemDragListener);

    }

    private void createRecyclerView() {

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(linearLayoutManager);

        feedFolders = LitePal.order("ordervalue").find(FeedFolder.class);
        //更新顺序
        for (int i = 0; i < feedFolders.size() ; i++) {
            feedFolders.get(i).setOrderValue(i+1);
            feedFolders.get(i).save();
        }
        //更新
        adapter = new FeedFolderListAdapter(feedFolders,getActivity());
        adapter.bindToRecyclerView(recyclerView);
        if (feedFolders.size() == 0){
            adapter.setEmptyView(R.layout.simple_empty_view,recyclerView);
        }

    }

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

    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void refreshUI(EventMessage eventBusMessage) {
        if(EventMessage.feedFolderOperation.contains(eventBusMessage.getType())){
            ALog.d("收到新的订阅添加,更新!" + eventBusMessage);
            createRecyclerView();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (EventBus.getDefault().isRegistered(this)){
            EventBus.getDefault().unregister(this);
        }
    }
}