package com.spark.meizi.meizi;


import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;

import com.spark.meizi.R;
import com.spark.meizi.base.BaseFragment;
import com.spark.meizi.base.BaseRecyclerView;
import com.spark.meizi.base.FooterRecyclerAdapter;
import com.spark.meizi.base.listener.BaseRecyclerOnScrollListener;
import com.spark.meizi.meizi.entity.Meizi;

import java.util.List;

import butterknife.BindView;


public class MeiziFragment extends BaseFragment<MeiziPresenter> implements IMeizi,
        SwipeRefreshLayout.OnRefreshListener {

    @BindView(R.id.rv_meizi)
    BaseRecyclerView recyclerView;
    @BindView(R.id.srl_meizi)
    SwipeRefreshLayout swipeRefreshLayout;

    private FooterRecyclerAdapter<Meizi.ResultsBean, MeiziAdapter.MeiziViewHolder> meiziAdapter;
    private StaggeredGridLayoutManager staggeredGridLayoutManager = null;

    BaseRecyclerOnScrollListener scrollListener;

    public MeiziFragment() {
    }

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

    @Override
    protected MeiziPresenter getPresenter() {
        return new MeiziPresenter(this);
    }

    @Override
    public int getContentViewId() {
        return R.layout.fragment_meizi;
    }

    @Override
    public void initSubViews(View view) {
        super.initSubViews(view);
        staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        meiziAdapter = new FooterRecyclerAdapter<>(new MeiziAdapter());
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
        recyclerView.setAdapter(meiziAdapter);
        scrollListener = new BaseRecyclerOnScrollListener(staggeredGridLayoutManager) {
            @Override
            public void onLoadMore(int currentPage) {
                mPresenter.requestMeizi(currentPage);
            }
        };
        recyclerView.addOnScrollListener(scrollListener);
        swipeRefreshLayout.setOnRefreshListener(this);
    }

    @Override
    public void initData() {
        super.initData();
        List<Meizi.ResultsBean> list = mPresenter.loadDataFromDB();
        if (!list.isEmpty()) {
            meiziAdapter.getWrapped().setData(list);
            meiziAdapter.getWrapped().notifyDataSetChanged();
        } else {
            mPresenter.requestMeizi(1);
        }
    }

    @Override
    public void onDestroy() {
        mPresenter.getRealm().close();
        super.onDestroy();
    }

    @Override
    public void onRefresh() {
        List list = meiziAdapter.getWrapped().getData();
        if (list != null) {
            list.clear();
            meiziAdapter.notifyDataSetChanged();
        }
        scrollListener.clearPage();
        scrollListener.onLoadMore(1);
    }

    @Override
    public FooterRecyclerAdapter getAdapter() {
        return meiziAdapter;
    }

    @Override
    public void setRefresh(boolean isRefresh) {
        swipeRefreshLayout.setRefreshing(isRefresh);
    }
}