package ruolan.com.myhearts.ui.fragment.live;

import android.app.VoiceInteractor;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.convert.StringConvert;
import com.lzy.okrx.RxAdapter;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

import okhttp3.Call;
import okhttp3.Response;
import ruolan.com.myhearts.R;
import ruolan.com.myhearts.adapter.LivingAdapter;
import ruolan.com.myhearts.adapter.NewsAdapter;
import ruolan.com.myhearts.contant.Contants;
import ruolan.com.myhearts.contant.HttpUrlPaths;
import ruolan.com.myhearts.entity.LivingBean;
import ruolan.com.myhearts.entity.NewsBannerBean;
import ruolan.com.myhearts.entity.NewsBean;
import ruolan.com.myhearts.widget.carousel.FlyBanner;
import rx.android.schedulers.AndroidSchedulers;

/**
 * Created by Administrator on 2016/11/10.
 * 新闻fragment
 */

public class ComputerNewsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {

    //新闻类型
    private String mType;
    //新闻url
    private String newsUrl;
    //轮播图
    private String bannerUrl;

    private String title;

    private int startIndex = 0;
    private int endIndex = 19;

    //上拉加载更多的时候请求数量
    private int count = 20;
    //总共页数
    private int totalPage;
    //当前页数
    private int currentPage = 1;
    private List<NewsBean.DatasEntity> mDatasEntities = new ArrayList<>();

    private SwipeRefreshLayout mRefreshLayout;
    private RecyclerView mRecyclerView;
    private NewsAdapter mNewsAdapter;
    private FlyBanner mFlyBanner;


    public static ComputerNewsFragment newInstance(String index, String title) {
        // Required empty public constructor
        Bundle bundle = new Bundle();
        bundle.putString(Contants.INDEX, index);
        bundle.putString(Contants.TITLE, title);
        ComputerNewsFragment fragment = new ComputerNewsFragment();
        fragment.setArguments(bundle);
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_computer_news_layout, container, false);
        mType = getArguments().getString(Contants.INDEX);
        title = getArguments().getString(Contants.TITLE);
        bannerUrl = HttpUrlPaths.getNewBanner(mType);
        newsUrl = HttpUrlPaths.getNewsData(mType, startIndex, endIndex);
        initView(view);
        initData();
        return view;
    }

    private void initData() {

        OkGo.get(newsUrl)
                .tag(this)
                .cacheMode(CacheMode.DEFAULT)
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(String s, Call call, Response response) {
                        Log.d("ComputerNewsFragment", s);
                        Type type = new TypeToken<NewsBean>() {
                        }.getType();
                        NewsBean bean = new Gson().fromJson(s, type);
                        if (bean.getCount() > 0) {
                            mRefreshLayout.setRefreshing(false);  //加载完事消失加载条
                            mDatasEntities = bean.getDatas();
                            totalPage = bean.getEndIndex() / 20;
                            mNewsAdapter = new NewsAdapter(getContext(), mDatasEntities);

                            mNewsAdapter.setOnItemClickListener((view, position, categoryBean) -> {
                                Intent intent = new Intent(getActivity(), NewsDetailActivity.class);
                                intent.putExtra("id", categoryBean.getId());
                                intent.putExtra(Contants.TITLE, title);
                                startActivity(intent);
                            });

                            mRecyclerView.setAdapter(mNewsAdapter);
                            mNewsAdapter.setEntities(mDatasEntities);
                            setHeaderView();
                        }
                    }

                    @Override
                    public void onError(Call call, Response response, Exception e) {
                        super.onError(call, response, e);
                        Toast.makeText(getContext(), e.toString(), Toast.LENGTH_SHORT).show();
                        Log.d("ComputerNewsFragment", e.toString());
                    }
                });

//        OkGo.get(newsUrl)
//                .getCall(StringConvert.create(), RxAdapter.<String>create())
//                .doOnSubscribe(() -> {
//                })
//                .observeOn(AndroidSchedulers.mainThread())
//                .subscribe(s -> {
//                    Type type = new TypeToken<NewsBean>() {
//                    }.getType();
//                    NewsBean bean = new Gson().fromJson(s, type);
//                    if (bean.getCount() > 0) {
//                        mDatasEntities = bean.getDatas();
//                        totalPage = bean.getEndIndex() / 20;
//                        mNewsAdapter.setEntities(mDatasEntities);
//                    }
//                }, throwable -> {
//                    Log.d("ComputerNewsFragment", throwable.toString());
//                });
    }

    private void setHeaderView() {
        View headerView = LayoutInflater.from(getContext())
                .inflate(R.layout.news_banner_item_layout, null);
        mFlyBanner = (FlyBanner) headerView.findViewById(R.id.fly_banner);
        OkGo.get(bannerUrl)
                .tag(this)
                .cacheMode(CacheMode.DEFAULT)
                .execute(new StringCallback() {

                    @Override
                    public void onSuccess(String s, Call call, Response response) {
                        Type type = new TypeToken<NewsBannerBean>() {
                        }.getType();
                        NewsBannerBean bannerBean = new Gson().fromJson(s, type);
                        if (bannerBean.getCount() > 0) {
                            List<String> imgBanner = new ArrayList<>();
                            for (NewsBannerBean.DatasEntity entity : bannerBean.getDatas()) {
                                imgBanner.add(entity.getHeadPicUrl());
                            }
                            mFlyBanner.setImagesUrl(imgBanner);
                            mFlyBanner.setOnItemClickListener(position -> {
                                String id = bannerBean.getDatas().get(position).getId();
                                Intent intent = new Intent(getActivity(), NewsDetailActivity.class);
                                intent.putExtra("id", id);
                                intent.putExtra(Contants.TITLE, title);
                                startActivity(intent);
                            });
                        }
                    }
                });
        mNewsAdapter.setHeaderView(headerView);

    }

    private void initView(View view) {
        mRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh);
        mRefreshLayout.setColorSchemeColors(Color.YELLOW, Color.RED, Color.BLUE, Color.GREEN);
        //能够模拟进入就刷新
        mRefreshLayout.post(() -> mRefreshLayout.setRefreshing(true));
        mRefreshLayout.setOnRefreshListener(this);
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        LinearLayoutManager manager = new LinearLayoutManager(getContext());
        mRecyclerView.setLayoutManager(manager);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());

        mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                int lastVisiableItemPosition = manager.findLastVisibleItemPosition();
                if (lastVisiableItemPosition + 1 == mNewsAdapter.getItemCount()) {
                    if (!isLoading) {
                        isLoading = true;
                        new Handler().postDelayed(() -> {
                            getMoreData();
                            isLoading = false;
                            mNewsAdapter.notifyItemRemoved(mNewsAdapter.getItemCount());
                        }, 3000);
                    }
                }
            }
        });
        //mNewsAdapter = new NewsAdapter(getContext(),mDatasEntities);
        //  mRecyclerView.setAdapter(mNewsAdapter);
    }

    /**
     * 获取更多数据  分页加载
     */
    private void getMoreData() {
        currentPage++;
        startIndex += count;
        endIndex += count;
        if (currentPage > totalPage + 1) {
            mNewsAdapter.notifyItemRemoved(mNewsAdapter.getItemCount());
            Toast.makeText(getContext(), getActivity().getResources()
                    .getString(R.string.loading_finish), Toast.LENGTH_SHORT).show();
            return;
        }
        newsUrl = HttpUrlPaths.getNewsData(mType, startIndex, endIndex);
        OkGo.get(newsUrl)
                .tag(this)
                .cacheMode(CacheMode.DEFAULT)
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(String s, Call call, Response response) {
                        Log.d("ComputerNewsFragment", s);
                        Type type = new TypeToken<NewsBean>() {
                        }.getType();
                        NewsBean bean = new Gson().fromJson(s, type);
                        if (bean.getCount() > 0) {
                            mRefreshLayout.setRefreshing(false);  //加载完事消失加载条
                            List<NewsBean.DatasEntity> datas = bean.getDatas();
                            mDatasEntities.addAll(datas);
                            // totalPage = bean.getEndIndex() / 20;
                            // mNewsAdapter = new NewsAdapter(getContext(), mDatasEntities);
                            // mRecyclerView.setAdapter(mNewsAdapter);
                            mNewsAdapter.setEntities(mDatasEntities);
                            // setHeaderView();
                        }
                    }

                    @Override
                    public void onError(Call call, Response response, Exception e) {
                        super.onError(call, response, e);
                        Toast.makeText(getContext(), e.toString(), Toast.LENGTH_SHORT).show();
                        Log.d("ComputerNewsFragment", e.toString());
                    }
                });
    }

    private boolean isLoading;

    @Override
    public void onRefresh() {

        refreshData();
    }

    private void refreshData() {
        mDatasEntities.clear();
        currentPage = 1;
        startIndex = 0;
        endIndex = 19;
        if (currentPage > totalPage + 1) {
            mNewsAdapter.notifyItemRemoved(mNewsAdapter.getItemCount());
            Toast.makeText(getContext(), getActivity().getResources()
                    .getString(R.string.loading_finish), Toast.LENGTH_SHORT).show();
            return;
        }
        newsUrl = HttpUrlPaths.getNewsData(mType, startIndex, endIndex);
        OkGo.get(newsUrl)
                .tag(this)
                .cacheMode(CacheMode.DEFAULT)
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(String s, Call call, Response response) {
                        Log.d("ComputerNewsFragment", s);
                        Type type = new TypeToken<NewsBean>() {
                        }.getType();
                        NewsBean bean = new Gson().fromJson(s, type);
                        if (bean.getCount() > 0) {
                            mRefreshLayout.setRefreshing(false);  //加载完事消失加载条
                            List<NewsBean.DatasEntity> datas = bean.getDatas();
                            mDatasEntities.addAll(datas);
                            // totalPage = bean.getEndIndex() / 20;
                            // mNewsAdapter = new NewsAdapter(getContext(), mDatasEntities);
                            // mRecyclerView.setAdapter(mNewsAdapter);
                            mNewsAdapter.setEntities(mDatasEntities);
                            // setHeaderView();
                        }
                    }

                    @Override
                    public void onError(Call call, Response response, Exception e) {
                        super.onError(call, response, e);
                        Toast.makeText(getContext(), e.toString(), Toast.LENGTH_SHORT).show();
                        Log.d("ComputerNewsFragment", e.toString());
                    }
                });

    }
}