package tv.baokan.liuageandroid.ui.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.lcodecore.tkrefreshlayout.RefreshListenerAdapter;
import com.lcodecore.tkrefreshlayout.TwinklingRefreshLayout;
import com.lcodecore.tkrefreshlayout.header.SinaRefreshView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

import okhttp3.Call;
import tv.baokan.liuageandroid.R;
import tv.baokan.liuageandroid.adapter.NewsListRecyclerViewAdapter;
import tv.baokan.liuageandroid.model.ArticleListBean;
import tv.baokan.liuageandroid.model.UserBean;
import tv.baokan.liuageandroid.utils.APIs;
import tv.baokan.liuageandroid.utils.AdManager;
import tv.baokan.liuageandroid.utils.LogUtils;
import tv.baokan.liuageandroid.utils.NetworkUtils;
import tv.baokan.liuageandroid.utils.ProgressHUD;
import tv.baokan.liuageandroid.widget.NavigationViewPush;

public class CommentRecordActivity extends BaseActivity {

    private static final String TAG = "CommentRecordActivity";
    private int pageIndex = 1;
    private NavigationViewPush mNavigationViewRed;
    private TwinklingRefreshLayout mRefreshLayout;         // 上下拉刷新
    private RecyclerView mNewsListRecyclerView;    // 列表视图
    private NewsListRecyclerViewAdapter newsListAdapter;  // 适配器

    /**
     * 便捷启动当前activity
     *
     * @param activity 启动当前activity的activity
     */
    public static void start(Activity activity) {
        Intent intent = new Intent(activity, CommentRecordActivity.class);
        activity.startActivity(intent);
        activity.overridePendingTransition(R.anim.push_enter, R.anim.push_exit);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_comment_record);

        prepareUI();
        // 配置recyclerView资讯列表
        setupRecyclerView();

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                // 配置刷新
                setupRefresh();
            }
        }, 100);
    }

    /**
     * 准备UI
     */
    private void prepareUI() {
        mNavigationViewRed = (NavigationViewPush) findViewById(R.id.nav_comment);
        mRefreshLayout = (TwinklingRefreshLayout) findViewById(R.id.srl_comment_record_list_refresh);
        mNewsListRecyclerView = (RecyclerView) findViewById(R.id.rv_comment_record_list);
        mNavigationViewRed.setupNavigationView(true, false, "我的评论", new NavigationViewPush.OnClickListener() {
            @Override
            public void onBackClick(View v) {
                finish();
            }
        });
    }

    /**
     * 配置recyclerView资讯列表
     */
    private void setupRecyclerView() {
        mNewsListRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
        newsListAdapter = new NewsListRecyclerViewAdapter(mContext);
        mNewsListRecyclerView.setAdapter(newsListAdapter);
        newsListAdapter.setOnItemTapListener(new NewsListRecyclerViewAdapter.OnItemTapListener() {
            @Override
            public void onItemTapListener(ArticleListBean articleListBean) {
                // 打开文章详情
                openArticleDetail(articleListBean);
            }
        });

        // 监听滚动
        mNewsListRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                switch (newState) {
                    case RecyclerView.SCROLL_STATE_SETTLING:
                        if (!Fresco.getImagePipeline().isPaused()) {
                            Fresco.getImagePipeline().pause();
                        }
                        break;
                    case RecyclerView.SCROLL_STATE_DRAGGING:
                    case RecyclerView.SCROLL_STATE_IDLE:
                        if (Fresco.getImagePipeline().isPaused()) {
                            Fresco.getImagePipeline().resume();
                        }
                        break;
                }
            }
        });
    }

    /**
     * 配置刷新控件
     */
    private void setupRefresh() {

        // 顶部刷新视图
        SinaRefreshView sinaRefreshView = new SinaRefreshView(mContext);
        sinaRefreshView.setArrowResource(R.drawable.pull_refresh_arrow);
        mRefreshLayout.setHeaderView(sinaRefreshView);

        // 到达底部自动加载更多
        mRefreshLayout.setAutoLoadMore(true);

        // 监听刷新
        mRefreshLayout.setOnRefreshListener(new RefreshListenerAdapter() {
            @Override
            public void onRefresh(final TwinklingRefreshLayout refreshLayout) {

                // 重新加载并缓存数据
                pageIndex = 1;
                loadCollectionFromNetwork(1, 0);
            }

            @Override
            public void onLoadMore(final TwinklingRefreshLayout refreshLayout) {
                pageIndex += 1;
                loadCollectionFromNetwork(pageIndex, 1);
            }
        });

        // 默认加载一次数据 不使用下拉刷新
        mRefreshLayout.startRefresh();

    }

    /**
     * 加载收藏数据从网络
     *
     * @param pageIndex 页码
     * @param method    0下拉 1上拉
     */
    private void loadCollectionFromNetwork(int pageIndex, final int method) {

        HashMap<String, String> parameters = new HashMap<>();
        parameters.put("username", UserBean.shared().getUsername());
        parameters.put("userid", UserBean.shared().getUserid());
        parameters.put("token", UserBean.shared().getToken());
        parameters.put("pageIndex", String.valueOf(pageIndex));

        NetworkUtils.shared.get(APIs.GET_USER_COMMENT, parameters, new NetworkUtils.StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                ProgressHUD.showInfo(mContext, "您的网络不给力");
                if (method == 0) {
                    mRefreshLayout.finishRefreshing();
                } else {
                    mRefreshLayout.finishLoadmore();
                }
            }

            @Override
            public void onResponse(String response, int id) {
                LogUtils.d(TAG, "收藏 = " + response);
                try {
                    JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
                    List<ArticleListBean> tempListBeans = new ArrayList<>();
                    for (int i = 0; i < jsonArray.length(); i++) {
                        ArticleListBean bean = new ArticleListBean(jsonArray.getJSONObject(i));
                        tempListBeans.add(bean);
                        LogUtils.d(TAG, bean.toString());
                    }
                    if (tempListBeans.size() == 0) {
                        ProgressHUD.showInfo(mContext, "没有更多数据了");
                    } else {
                        // 刷新数据
                        newsListAdapter.updateData(new ArrayList<ArticleListBean>(), tempListBeans, method);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                } finally {
                    if (method == 0) {
                        mRefreshLayout.finishRefreshing();
                    } else {
                        mRefreshLayout.finishLoadmore();
                    }
                }

            }
        });

    }

    /**
     * 打开文章详情页面
     *
     * @param articleBean 文章模型
     */
    private void openArticleDetail(ArticleListBean articleBean) {

        // 是广告分类,并且是外链。则打开网页activity
        if (articleBean.getClassid().equals(AdManager.shared().classid) && articleBean.getIsurl().equals("1")) {
            AdWebViewActivity.start(mContext, articleBean.getTitleurl(), articleBean.getTitle(), articleBean.getTitlepic());
            return;
        }

        // 超过3张图才打开图集activity
        if (articleBean.getMorepic().length > 3) {
            PhotoDetailActivity.start(mContext, articleBean.getClassid(), articleBean.getId());
        } else {
            NewsDetailActivity.start(mContext, articleBean.getClassid(), articleBean.getId());
        }
    }


}