package com.time.cat.ui.modules.plans;

import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ProgressBar;

import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.api.ScrollBoundaryDecider;
import com.time.cat.R;
import com.time.cat.ui.base.BaseFragment;
import com.time.cat.ui.base.mvp.presenter.FragmentPresenter;
import com.time.cat.ui.modules.main.listener.OnPlanViewClickListener;
import com.time.cat.ui.modules.plans.card_view.PlanCardFragment;
import com.time.cat.ui.modules.plans.list_view.PlanListFragment;
import com.time.cat.ui.modules.plans.pile_view.PileFragment;
import com.time.cat.util.override.LogUtil;
import com.timecat.commonjar.contentProvider.SPHelper;

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

import static com.time.cat.data.Constants.PLANS_VIEW_TYPE;

/**
 * @author dlink
 * @date 2018/1/25
 * @discription 生物钟fragment
 */
public class PlansFragment extends BaseFragment implements FragmentPresenter, OnPlanViewClickListener {
    @SuppressWarnings("unused")
    private static final String TAG = "PlansFragment";


    //<生命周期>-------------------------------------------------------------------------------------

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FragmentConfig(false, true);
    }

    @Override
    public int getLayoutId() {
        return R.layout.base_refresh_layout;
    }

    @Override
    protected View initViews(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_routines, container, false);
        progressBar = view.findViewById(R.id.progress_bar);
        frameLayout = view.findViewById(R.id.fragment_container);
        mRefreshLayout = view.findViewById(R.id.refreshLayout);
        initView();

        return view;
    }

    @Override
    public void onResume() {
        super.onResume();
        refreshData();
    }
    //</生命周期>------------------------------------------------------------------------------------


    //<editor-fold desc="UI显示区--操作UI,但不存在数据获取或处理代码,也不存在事件监听代码">--------------------------------
    private ProgressBar progressBar;
    private FrameLayout frameLayout;
    private List<Fragment> fragmentList;
    RefreshLayout mRefreshLayout;
    PileFragment pileFragment;
    PlanListFragment planListFragment;
    PlanCardFragment planCardFragment;

    @Override
    public void initView() {//必须调用
        super.initView();
        fragmentList = new ArrayList<>();

        mRefreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDecider() {
            @Override
            public boolean canRefresh(View content) {
                return onScrollBoundaryDecider != null && onScrollBoundaryDecider.canRefresh();
            }

            @Override
            public boolean canLoadMore(View content) {
                return onScrollBoundaryDecider != null && onScrollBoundaryDecider.canLoadMore();
            }
        });
    }

    private void updateViewPager() {
        if (fragmentList == null) return;
        for (Fragment f : fragmentList) {
            getChildFragmentManager().beginTransaction().remove(f).commitNow();
        }
        fragmentList.clear();
        switch(SPHelper.getInt(PLANS_VIEW_TYPE, 0)) {
            case 0:
                planListFragment = new PlanListFragment();
                fragmentList.add(planListFragment);
                setOnScrollBoundaryDecider(planListFragment);
                planListFragment.setUserVisibleHint(true);
                getChildFragmentManager().beginTransaction().add(R.id.fragment_container, planListFragment).commitNow();
                break;
            case 1:
                planCardFragment = new PlanCardFragment();
                fragmentList.add(planCardFragment);
                setOnScrollBoundaryDecider(planCardFragment);
                planCardFragment.setUserVisibleHint(true);
                getChildFragmentManager().beginTransaction().add(R.id.fragment_container, planCardFragment).commitNow();
                break;
            case 2:
                pileFragment = new PileFragment();
                fragmentList.add(pileFragment);
                setOnScrollBoundaryDecider(pileFragment);
                pileFragment.setUserVisibleHint(true);
                getChildFragmentManager().beginTransaction().add(R.id.fragment_container, pileFragment).commitNow();
                break;
        }
    }
    //</editor-fold desc="UI显示区--操作UI,但不存在数据获取或处理代码,也不存在事件监听代码">)>-----------------------------

    //<editor-fold desc="Data数据区--存在数据获取或处理代码,但不存在事件监听代码">-----------------------------------------
    @Override
    public void initData() {//必须调用
        new Handler().postDelayed(() -> {
            if (!isPrepared()) {
                LogUtil.w("initData", "目标已被回收");
                return;
            }
            updateViewPager();
            frameLayout.setVisibility(View.VISIBLE);
            progressBar.setVisibility(View.GONE);
        }, 500);
    }

    public void refreshData() {

        if (frameLayout != null) {
            frameLayout.setVisibility(View.GONE);
        }

        if (progressBar != null) {
            progressBar.setVisibility(View.VISIBLE);
        }

        if (isFragmentVisible()) {
            initData();
        } else {
            setForceLoad(true);
        }
    }
    //</editor-fold desc="Data数据区--存在数据获取或处理代码,但不存在事件监听代码">----------------------------------------

    //<editor-fold desc="Event事件区--只要存在事件监听代码就是">----------------------------------------------------------
    @Override
    public void initEvent() {//必须调用

    }

    @Override
    public void notifyDataChanged() {
        refreshData();
    }

    @Override
    public void onViewPlanRefreshClick() {
        refreshData();
    }
    //</editor-fold desc="Event事件区--只要存在事件监听代码就是">---------------------------------------------------------


    //<内部类>---尽量少用----------------------------------------------------------------------------
    OnScrollBoundaryDecider onScrollBoundaryDecider;

    public void setOnScrollBoundaryDecider(OnScrollBoundaryDecider onScrollBoundaryDecider) {
        this.onScrollBoundaryDecider = onScrollBoundaryDecider;
    }

    public interface OnScrollBoundaryDecider {
        boolean canRefresh();
        boolean canLoadMore();
    }
    //</内部类>---尽量少用---------------------------------------------------------------------------

}