package com.yidianling.fm;


import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.ydl.ydlcommon.base.BaseFragment;
import com.ydl.ydlcommon.data.http.RxUtils;
import com.ydl.ydlcommon.data.http.ThrowableConsumer;
import com.ydl.ydlcommon.ui.LogoLoadingView;
import com.ydl.ydlcommon.utils.BuryPointUtils;
import com.yidianling.fm.param.FMParam;
import com.yidianling.fm.router.FMIn;

import org.jetbrains.annotations.NotNull;

import in.srain.cube.views.loadmore.LoadMoreContainer;
import in.srain.cube.views.loadmore.LoadMoreHandler;
import in.srain.cube.views.loadmore.LoadMoreListViewContainer;
import in.srain.cube.views.ptr.PtrDefaultHandler;
import in.srain.cube.views.ptr.PtrFrameLayout;
import in.srain.cube.views.ptr.PtrHandler;
import in.srain.cube.views.ptr.header.MaterialHeader;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;

public class FMListViewFragment extends BaseFragment implements PtrHandler, LoadMoreHandler {


    FMListAdapter adapter;

    int page = 0;
    boolean hasMore = true;

    int tagId;

    //    @BindView(R.id.lv_content)
    private ListView lv_content;
    //    @BindView(R.id.load_more_list_view_container)
    private LoadMoreListViewContainer load_more_list_view_container;
    //    @BindView(R.id.store_house_ptr_frame)
    private PtrFrameLayout store_house_ptr_frame;

    private TextView ll_empty_txt;
    private LinearLayout ll_empty;
    private LogoLoadingView v_loading;

    @Override
    public int layoutResId() {
        return R.layout.fm_fragment_fm_list_view;
    }

    @Override
    public void initDataAndEventLazy() {

    }

    @Override
    public void initDataAndEvent() {
        if (getRootView() != null) {
            lv_content = getRootView().findViewById(R.id.lv_content);
            ll_empty_txt = getRootView().findViewById(R.id.ll_empty_txt);
            ll_empty = getRootView().findViewById(R.id.ll_empty);
            v_loading = getRootView().findViewById(R.id.v_loading);
            load_more_list_view_container = getRootView().findViewById(R.id.load_more_list_view_container);
            store_house_ptr_frame = getRootView().findViewById(R.id.store_house_ptr_frame);
        }
        final MaterialHeader header = new MaterialHeader(getActivity());
        int color = getResources().getColor(R.color.fm_google_green);
        header.setColorSchemeColors(new int[]{color});
        header.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
        int padding = (int) getActivity().getResources().getDimension(R.dimen.platform_default_dis_size);
        header.setPadding(0, padding, 0, padding);
        header.setPtrFrameLayout(store_house_ptr_frame);
        store_house_ptr_frame.setHeaderView(header);
        store_house_ptr_frame.setPtrHandler(this);
        store_house_ptr_frame.addPtrUIHandler(header);

        // 使用默认样式
        //load_more_list_view_container.useDefaultHeader();
        load_more_list_view_container.setLoadMoreHandler(this);
        adapter = new FMListAdapter(getActivity());

        lv_content.setAdapter(adapter);

        initNetLossView();

        lv_content.setVisibility(View.GONE);
        v_loading.setVisibility(View.VISIBLE);
        ll_empty.setVisibility(View.GONE);
        if (tagId == 1) {
            if (FMIn.INSTANCE.isLogin()) {
                v_loading.setViewType(LogoLoadingView.TYPE_LOADING, null);
            } else {
                v_loading.setVisibility(View.GONE);
                ll_empty.setVisibility(View.VISIBLE);
            }
        } else {
            v_loading.setViewType(LogoLoadingView.TYPE_LOADING, null);
        }

        lv_content.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(getActivity(), FMDetailActivity.class);
                Bundle bundle = new Bundle();
                bundle.putInt("id", adapter.mDataList.get(position).getId());
                intent.putExtra("bundle", bundle);
                startActivity(intent);
                click_play();
                BuryPointUtils.getInstance().createMap()

                        .put("FM_name", adapter.mDataList.get(position).getName())
                        .burryPoint("FM_play");
            }
        });

        if (tagId == 1 && !FMIn.INSTANCE.isLogin()) {
            return;
        }
        getData(false);
    }

    private void initNetLossView() {
        v_loading.setListener(new LogoLoadingView.LogoLoadingListener() {
            @Override
            public void onDataResetClick() {
                v_loading.setViewType(LogoLoadingView.TYPE_LOADING, null);
                if (tagId == 1) {
                    collectList(false);
                }else {
                    allList(false);
                }
            }

            @Override
            public void onBackClick() {
                getActivity().finish();
            }
        });
    }

    public void click_play() {
    }


    public FMListViewFragment setTagId(int tagId) {
        this.tagId = tagId;
        return this;
    }


    void getData(final boolean loadMore) {
        if (loadMore && !hasMore) {
            if (load_more_list_view_container != null) {
                load_more_list_view_container.loadMoreFinish(false, false);
            }
            return;
        }
        if (loadMore) {
            page++;
        } else {
            page = 1;
        }
        switch (tagId) {
            case 0:
                allList(loadMore);
                break;

            case 1:
                collectList(loadMore);
                break;
        }
    }

    private void collectList(final boolean loadMore) {
        FmDataManager.INSTANCE.getHttp().getFavFMs(new FMParam(String.valueOf(page), "20"))
                .subscribeOn(Schedulers.io())
                .compose(RxUtils.resultJavaData())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(fms -> {
                    if (fms.getList().size() == 0) {
                        lv_content.setVisibility(View.GONE);
                        v_loading.setVisibility(View.GONE);
                        ll_empty.setVisibility(View.VISIBLE);
                    }else {
                        lv_content.setVisibility(View.VISIBLE);
                        v_loading.setVisibility(View.GONE);
                        ll_empty.setVisibility(View.GONE);
                        load_more_list_view_container.loadMoreFinish(false, true);
                        if (fms == null || fms.getList().size() < 20) {
                            hasMore = false;
                        }
                        if (!loadMore)
                            adapter.setDataList(fms.getList());
                        else if (fms != null)
                            adapter.addDataList(fms.getList());
                    }
                }, new ThrowableConsumer() {
                    @Override
                    public void accept(@NotNull String msg) {
                        lv_content.setVisibility(View.GONE);
                        v_loading.setVisibility(View.VISIBLE);
                        ll_empty.setVisibility(View.GONE);
                        v_loading.setViewType(LogoLoadingView.TYPE_NET_LOSS, msg);
                        if (msg.equals("还没有喜欢的电台内容")) {
                            return;
                        }
                    }
                });

    }

    private void allList(final boolean loadMore) {
        FmDataManager.INSTANCE.getHttp().getAllFMs(new FMParam(String.valueOf(page), "20"))
                .subscribeOn(Schedulers.io())
                .compose(RxUtils.resultJavaData())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(fms -> {
                    if (fms.getList().size() == 0) {
                        lv_content.setVisibility(View.GONE);
                        v_loading.setVisibility(View.GONE);
                        ll_empty.setVisibility(View.VISIBLE);
                        ll_empty_txt.setText("这里还没有数据哦");
                    } else {
                        lv_content.setVisibility(View.VISIBLE);
                        v_loading.setVisibility(View.GONE);
                        ll_empty.setVisibility(View.GONE);
                        load_more_list_view_container.loadMoreFinish(false, true);
                        if (fms == null || fms.getList().size() < 20) {
                            hasMore = false;
                        }
                        if (!loadMore)
                            adapter.setDataList(fms.getList());
                        else if (fms != null)
                            adapter.addDataList(fms.getList());
                    }
                }, new ThrowableConsumer() {
                    @Override
                    public void accept(@NotNull String msg) {
                        lv_content.setVisibility(View.GONE);
                        v_loading.setVisibility(View.VISIBLE);
                        ll_empty.setVisibility(View.GONE);
                        v_loading.setViewType(LogoLoadingView.TYPE_NET_LOSS, msg);
                    }
                });

    }

    @Override
    public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
        return PtrDefaultHandler.checkContentCanBePulledDown(frame, lv_content, header);
    }

    @Override
    public void onRefreshBegin(PtrFrameLayout frame) {
        frame.postDelayed(new Runnable() {
            @Override
            public void run() {
                store_house_ptr_frame.refreshComplete();
            }
        }, 1500);
        getData(false);
    }


    @Override
    public void onLoadMore(LoadMoreContainer loadMoreContainer) {
        getData(true);
    }

}