package com.dayu.bigfish.ui.fragment;

import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import com.dayu.bigfish.R;
import com.dayu.bigfish.base.BaseFragment;
import com.dayu.bigfish.bean.Tab;
import com.dayu.bigfish.bean.event.RefreshTab;
import com.dayu.bigfish.presenter.homeorder.HomeOrderContract;
import com.dayu.bigfish.presenter.homeorder.HomeOrderPresenter;
import com.dayu.bigfish.ui.OrderRecordActivity;
import com.dayu.bigfish.ui.adapter.FragmentHomeAdapter;
import com.dayu.bigfish.utils.GetUserInfo;
import com.dayu.bigfish.utils.ProgressUtil;
import com.dayu.bigfish.utils.TabLayoutUtils;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

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

import butterknife.BindView;
import butterknife.OnClick;

import static com.dayu.bigfish.R.id.tabicon;

/**
 * Created by luofan on 2017/11/20.
 */

public class HomeOrderFragment extends BaseFragment<HomeOrderPresenter> implements HomeOrderContract.View {
    @BindView(R.id.home_tabLayout)
    TabLayout mTabLayout;
    @BindView(R.id.view_pager)
    ViewPager mViewPager;
    @BindView(R.id.title_right)
    TextView mTitleRight;
    public List<Fragment> list_fragments;
    private FragmentHomeAdapter adapter;
    private int userId;
    private TextView mTabNumTv;
    private TextView mTabTextTv;
    private boolean isFirstAddTab = true;
    public final static int SUBCRIBE_TIME = 2;//预约上门时间
    public final static int ORDER_YUYUE = 3;//修改预约时间
    public final static int ORDER_DOING = 4;//再次上门时间
    public final static int ORDER_SOP_FINISH = 5;//SOP已完成
    public final static int ORDER_FINISH = 6;//已完成
    public final static int ORDER_NOCONTACT_FINISH = 7;//无联系人已完成
    private int mTabIndex;
    private String[] tabDesc;

    public static HomeOrderFragment newInstance() {
        Bundle args = new Bundle();
        HomeOrderFragment fragment = new HomeOrderFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View initView(View view) {
        init();
        initData();
        return view;
    }

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

    @Override
    protected void lazyLoad() {
        initNetWorkTabNum(userId, 0);
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    public void init() {
        tabDesc = new String[]{mActivity.getString(R.string.waite_appointemnt), mActivity.getString(R.string.waite_server), mActivity.getString(R.string.order_exception), mActivity.getString(R.string.cancle_order)};
        userId = GetUserInfo.getACCOUNT_ID(mActivity);
        EventBus.getDefault().register(this);
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onRefreshTab(RefreshTab event) {
        initNetWorkTabNum(userId, event.getTabNum());
    }

    public void initData() {
        list_fragments = new ArrayList<>();
        list_fragments.add(new OrderFirstTabFragment());
        list_fragments.add(new OrderSecondTabFragment());
        list_fragments.add(new OrderThreeTabFragment());
        list_fragments.add(new OrderFourTabFragment());
        adapter = new FragmentHomeAdapter(getFragmentManager(), list_fragments);
        mViewPager.setAdapter(adapter);
        mTabLayout.setupWithViewPager(mViewPager);
        mTabLayout.setTabMode(TabLayout.MODE_FIXED);
        mViewPager.setOffscreenPageLimit(4);
        mViewPager.setCurrentItem(0);
        mTabLayout.post(() -> {
            TabLayoutUtils.setIndicator(mTabLayout, 15, 15, R.color.cl_order_item_line_bg, mActivity);
        });
        mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                int temp = tab.getPosition();
                if (tab.getCustomView() == null) {
                    return;
                }
                mTabNumTv = (TextView) tab.getCustomView().findViewById(R.id.tabtext);
                mTabTextTv = (TextView) tab.getCustomView().findViewById(R.id.tabicon);
                switch (temp) {
                    case 0:
                        mTabNumTv.setTextColor(getResources().getColor(R.color.cl_order_item_date));
                        mTabTextTv.setTextColor(getResources().getColor(R.color.cl_order_item_date));
                        mViewPager.setCurrentItem(0);
                        break;
                    case 1:
                        mTabNumTv.setTextColor(getResources().getColor(R.color.cl_tab_yellow));
                        mTabTextTv.setTextColor(getResources().getColor(R.color.cl_tab_yellow));
                        mViewPager.setCurrentItem(1);
                        break;
                    case 2:
                        mTabNumTv.setTextColor(getResources().getColor(R.color.cl_tab_read));
                        mTabTextTv.setTextColor(getResources().getColor(R.color.cl_tab_read));
                        mViewPager.setCurrentItem(2);
                        break;
                    case 3:
                        mViewPager.setCurrentItem(3);
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                if (mTabNumTv == null || mTabTextTv == null) {
                    return;
                }
                switch (tab.getPosition()) {
                    case 0:
                        mTabNumTv.setTextColor(getResources().getColor(R.color.cl_tab_init));
                        mTabTextTv.setTextColor(getResources().getColor(R.color.cl_tab_init));
                        break;
                    case 1:
                        mTabNumTv.setTextColor(getResources().getColor(R.color.cl_tab_init));
                        mTabTextTv.setTextColor(getResources().getColor(R.color.cl_tab_init));
                        break;
                    case 2:
                        mTabNumTv.setTextColor(getResources().getColor(R.color.cl_tab_init));
                        mTabTextTv.setTextColor(getResources().getColor(R.color.cl_tab_init));
                        break;
                    case 3:
                        break;
                }
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }


    /**
     * 请求服务器数据获取tab各状态的数量
     */
    private void initNetWorkTabNum(int userId, int tabIndex) {
        ProgressUtil.startLoad(mActivity);
        mTabIndex = tabIndex;
        mPresenter.getTabNum(userId);
    }

    /**
     * 将网络请求到的数据展示到tab上
     */
    private void setTabNum(Tab tab, int myTabIndex) {
        String[] tabNum = new String[]{tab.getReservation() + "", tab.getPendingservice() + "",
                tab.getError() + "", tab.getCanceled() + ""};
        if (isFirstAddTab) {
            mTabLayout.removeAllTabs();
            mTabLayout.addTab(mTabLayout.newTab().setCustomView(CreatTab(tabNum[0], tabDesc[0])));
            mTabLayout.addTab(mTabLayout.newTab().setCustomView(CreatTab(tabNum[1], tabDesc[1])));
            mTabLayout.addTab(mTabLayout.newTab().setCustomView(CreatTab(tabNum[2], tabDesc[2])));
            mTabLayout.addTab(mTabLayout.newTab().setCustomView(CreatTab(tabNum[3], tabDesc[3])));
            isFirstAddTab = false;
        } else {
            for (int i = 0; i < mTabLayout.getTabCount(); i++) {
                TextView tv = (TextView) mTabLayout.getTabAt(i).getCustomView().findViewById(R.id.tabtext);
                TextView tvIcon = (TextView) mTabLayout.getTabAt(i).getCustomView().findViewById(R.id.tabicon);
                tv.setText(tabNum[i]);
                tvIcon.setText(tabDesc[i]);
            }
            if (myTabIndex != -1) {
                mViewPager.setCurrentItem(myTabIndex);
                mTabLayout.getTabAt(myTabIndex).select();
            }
        }
    }

    /**
     * TabLayout  tab的自定义布局
     *
     * @param number tab标签上的数字(更新频繁)
     * @param iconID tab标签数字下的状态说明(1.0版本默认4种状态)
     */
    private View CreatTab(String number, String iconID) {

        View newtab = LayoutInflater.from(mActivity).inflate(R.layout.activity_home_tab, null);
        TextView textView_number = (TextView) newtab.findViewById(R.id.tabtext);
        AssetManager mgr = mActivity.getAssets();
        Typeface tf = Typeface.createFromAsset(mgr, "fonts/DIN Alternate Bold.ttf");
        textView_number.setTypeface(tf);
        textView_number.setText(number);
        TextView textView = (TextView) newtab.findViewById(tabicon);
        textView.setText(iconID);

        return newtab;
    }

    @OnClick(R.id.title_right)
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.title_right:
                Intent intent = new Intent(mActivity, OrderRecordActivity.class);
                mActivity.startActivity(intent);
                break;
        }
    }

    @Override
    public void getTabNumSuccess(Tab tab) {
        setTabNum(tab, mTabIndex);
    }


    @Override
    public void onDetach() {
        super.onDetach();
        EventBus.getDefault().unregister(this);
    }
}