package com.yidianling.dynamic.trendsHome;

import static com.yidianling.dynamic.bean.DynamicConstants.YDL_USER_ASK_PAGE_STAY_VISIT;
import static com.yidianling.dynamic.bean.DynamicConstants.YDL_USER_ASK_PAGE_VISIT;
import static com.yidianling.dynamic.bean.DynamicConstants.YDL_USER_ASK_QUESTIONS_BUTTON_CLICK;
import static com.yidianling.dynamic.bean.DynamicConstants.YDL_USER_ASK_TYPE_CLICK;
import static com.yidianling.dynamic.bean.DynamicConstants.YDL_USER_THOUGHTS_GROUP_MORE_CLICK;
import static com.yidianling.dynamic.bean.DynamicConstants.YDL_USER_THOUGHTS_GROUP_TYPE_CLICK;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.viewpager.widget.ViewPager;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.ydl.ydl_image.module.GlideApp;
import com.ydl.ydlcommon.base.BaseFragment;
import com.ydl.ydlcommon.utils.BuryPointUtils;
import com.ydl.ydlcommon.utils.ScreenUtil;
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils;
import com.yidianling.common.tools.RxDeviceTool;
import com.yidianling.common.tools.RxImageTool;
import com.yidianling.dynamic.R;
import com.yidianling.dynamic.bean.DynamicConstants;
import com.yidianling.dynamic.common.view.LooperTextView;
import com.yidianling.dynamic.dialog.TrendsAndQuestionDialog;
import com.yidianling.dynamic.dialog.listener.TrendsQuestionListener;
import com.yidianling.dynamic.model.TopicListDataBean;
import com.yidianling.dynamic.model.TrendsListBean;
import com.yidianling.dynamic.publishTrend.PublishTrendActivity;
import com.yidianling.dynamic.router.DynamicIn;
import com.yidianling.dynamic.topic.AllTopicActivity;
import com.yidianling.dynamic.topic.topicDetail.TopicDetailActivity;
import com.yidianling.dynamic.trendsHome.content.TrendsContentListFragment;
import com.yidianling.dynamic.trendsHome.view.TrendsHomeBannerView;

import java.util.List;

import jp.wasabeef.glide.transformations.RoundedCornersTransformation;

/**
 * Created by Jim on 2017/9/22 0022.
 * 首页问答fragment
 */
@Route(path = "/dynamic/dynamic")
public class TrendsHomeFragment extends BaseFragment implements ITrendHomeView, SwipeRefreshLayout.OnRefreshListener {

    private SwipeRefreshLayout swl;

    private ViewPager vpContent;

    private ImageView topicRoundIv1;

    private ImageView topicRoundIv2;

    private ImageView topicRoundIv3;

    private ConstraintLayout mConstraintLayout;

    private TextView tvMindGroup;

    private TextView tvMindMore;

    private FrameLayout frlTopicIv3;

    private FrameLayout frlTopicIv2;

    private FrameLayout frlTopicIv1;

    private AppBarLayout mAppBarLayout;
    private TextView mItemRecommendTv;
    private TextView mItemHotTv;
    private TextView mItemFocusTv;
    private TextView trendsTopicTv3;
    private TextView trendsTopicTv2;
    private TextView trendsTopicTv1;
    private FloatingActionButton mPublishTrendButton;
    private LooperTextView mLooperTextView;
    private Toolbar mToolBarTv;
    private TrendsHomeBannerView v_banner;
    private TrendsHomePresenter mPresenter;
    private Fragment[] mFragments;
    private TrendsHomeVpAdapter vpAdapter;
    private long lastTabClick = 0;
    private int currentPostion = -1;
    String tab;
    private long startTime;
    private long endTime;
    private TrendsAndQuestionDialog trendsAndQuestionDialog = null;

    public TrendsHomeFragment setTab(String tab) {
        this.tab = tab;
        return this;
    }

    public static TrendsHomeFragment newInstance() {
        return new TrendsHomeFragment();
    }


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

    @Override
    public void initDataAndEvent() {
        bindView(getView());
        initViews();
        initDatas();

    }

    @Override
    public void initDataAndEventLazy() {
//        initDatas();
    }

    private void initViews() {
        initBannerView();
        swl.setOnRefreshListener(this);
        swl.setColorSchemeResources(R.color.platform_main_theme);
        mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                if (verticalOffset == 0) {
                    swl.setEnabled(true);
                } else {
                    swl.setEnabled(false);
                }
                if (verticalOffset <= -appBarLayout.getTotalScrollRange() + mToolBarTv.getHeight()) {
                    mToolBarTv.setAlpha(1f);
                } else {
                    mToolBarTv.setAlpha(0f);
                }
            }
        });
        initStatus();
    }

    private void initStatus() {
        //4.4以下不支持状态栏变色
        int statusBarHeight = ScreenUtil.getStatusBarHeight(getActivity());
        CollapsingToolbarLayout.LayoutParams layoutParams = (CollapsingToolbarLayout.LayoutParams) mToolBarTv.getLayoutParams();
        layoutParams.height = (int) (getResources().getDimension(R.dimen.title_bar_height) + statusBarHeight);
        mToolBarTv.setPadding(0, statusBarHeight, 0, 0);
        mToolBarTv.setLayoutParams(layoutParams);

    }

    private void initDatas() {
        mPresenter = new TrendsHomePresenter();
        mPresenter.callBack = this;
        mPresenter.fetchDats();
    }

    private void initBannerView() {
        int screenSize = RxDeviceTool.getScreenWidth(getActivity());
        int topicRoundIv1Width = (screenSize - RxImageTool.dip2px(31)) * 2 / 3;
        int topicRoundIv23Width = (screenSize - RxImageTool.dip2px(31)) / 3;

        int topicRoundIv1Height = (int) (topicRoundIv1Width / 1.5f);
        int topicRoundIv23Height = (int) ((topicRoundIv1Height - RxImageTool.dip2px(1)) / 2f);

        ConstraintLayout.LayoutParams params1 = new ConstraintLayout.LayoutParams(topicRoundIv1Width, topicRoundIv1Height);
        params1.topMargin = RxImageTool.dp2px(10);
        params1.leftMargin = RxImageTool.dp2px(15);
        params1.leftToRight = mConstraintLayout.getId();
        params1.topToBottom = tvMindGroup.getId();
        frlTopicIv1.setLayoutParams(params1);

        ConstraintLayout.LayoutParams params2 = new ConstraintLayout.LayoutParams(topicRoundIv23Width, topicRoundIv23Height);
        params2.topMargin = RxImageTool.dp2px(10);
        params2.leftMargin = RxImageTool.dp2px(1);
        params2.leftToRight = frlTopicIv1.getId();
        params2.topToBottom = tvMindGroup.getId();
        frlTopicIv2.setLayoutParams(params2);

        ConstraintLayout.LayoutParams params3 = new ConstraintLayout.LayoutParams(topicRoundIv23Width, topicRoundIv23Height);
        params3.topMargin = RxImageTool.dp2px(1);
        params3.leftMargin = RxImageTool.dp2px(1);
        params3.leftToRight = frlTopicIv1.getId();
        params3.topToBottom = frlTopicIv2.getId();
        frlTopicIv3.setLayoutParams(params3);
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser && isResumed()) {
            startTime = System.currentTimeMillis();
            ActionCountUtils.Companion.count(YDL_USER_ASK_PAGE_VISIT);
        } else {
            if (startTime != 0L) {
                endTime = System.currentTimeMillis();
                ActionCountUtils.Companion.count(YDL_USER_ASK_PAGE_STAY_VISIT, String.valueOf(endTime - startTime));
            }
        }
        if (isVisibleToUser && isResumed()) {
            onResume();
        }
    }

    private void initViewPager() {
        vpAdapter = new TrendsHomeVpAdapter(getChildFragmentManager(), mFragments);
        vpContent.setAdapter(vpAdapter);
        vpContent.setOffscreenPageLimit(1);
        vpContent.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                if (position == currentPostion) {
                    return;
                }
                currentPostion = position;
                if (position >= 1) {
                    vpContent.setOffscreenPageLimit(2);
                }

                switchTab(position);
                switch (position) {
                    case 0:
                        BuryPointUtils.getInstance().createMap()
                                .put("toptab_name", "推荐")
                                .burryPoint("topTabClick");
                        BuryPointUtils.getInstance().trackViewScreen(getActivity(), "动态-推荐", "com.cxzapp.yidianling.trends.trendList.TrendsListFragment");
                        break;
                    case 1:
                        BuryPointUtils.getInstance().createMap()
                                .put("toptab_name", "最新")
                                .burryPoint("topTabClick");
                        BuryPointUtils.getInstance().trackViewScreen(getActivity(), "动态-最新", "com.cxzapp.yidianling.trends.trendList.TrendsListFragment");
                        break;
                    case 2:
                        BuryPointUtils.getInstance().createMap()
                                .put("toptab_name", "关注")
                                .burryPoint("topTabClick");
                        if (!DynamicIn.INSTANCE.loginByOneKeyLogin(getActivity(), true)) {
                            return;
                        }
                        BuryPointUtils.getInstance().trackViewScreen(getActivity(), "动态-关注", "com.cxzapp.yidianling.trends.trendList.TrendsListFragment");
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        if ("hot".equals(tab)) {
            vpContent.setCurrentItem(1);
            switchTab(1);
        } else if ("new".equals(tab)) {
            vpContent.setCurrentItem(0);
            switchTab(0);
        } else {
            vpContent.setCurrentItem(0);
            switchTab(0);
        }
    }


    private void switchTab(int index) {
        switch (index) {
            case 0:
                mItemRecommendTv.setSelected(false);
                mItemRecommendTv.setTextColor(getResources().getColor(R.color.dynamic_text_666666));
                mItemFocusTv.setSelected(false);
                mItemFocusTv.setTextColor(getResources().getColor(R.color.dynamic_text_666666));
                mItemHotTv.setSelected(true);
                mItemHotTv.setTextColor(getResources().getColor(R.color.platform_but_text_color));
                break;
            case 1:
                mItemRecommendTv.setSelected(true);
                mItemRecommendTv.setTextColor(getResources().getColor(R.color.platform_but_text_color));
                mItemFocusTv.setSelected(false);
                mItemFocusTv.setTextColor(getResources().getColor(R.color.dynamic_text_666666));
                mItemHotTv.setSelected(false);
                mItemHotTv.setTextColor(getResources().getColor(R.color.dynamic_text_666666));
                break;
            case 2:
                mItemRecommendTv.setSelected(false);
                mItemRecommendTv.setTextColor(getResources().getColor(R.color.dynamic_text_666666));
                mItemFocusTv.setSelected(true);
                mItemFocusTv.setTextColor(getResources().getColor(R.color.platform_but_text_color));
                mItemHotTv.setSelected(false);
                mItemHotTv.setTextColor(getResources().getColor(R.color.dynamic_text_666666));
                break;
        }
    }


    private void doClick(View view) {
        if (view.getId() == R.id.item_recommend_tv) {
            ActionCountUtils.Companion.count(YDL_USER_ASK_TYPE_CLICK, "推荐");
            vpContent.setCurrentItem(1);
        } else if (view.getId() == R.id.item_hot_tv) {
            ActionCountUtils.Companion.count(YDL_USER_ASK_TYPE_CLICK, "最新");
            vpContent.setCurrentItem(0);
        } else if (view.getId() == R.id.item_focus_tv) {
            ActionCountUtils.Companion.count(YDL_USER_ASK_TYPE_CLICK, "关注");
            vpContent.setCurrentItem(2);
        } else if (view.getId() == R.id.publish_trend_btn) {
            ActionCountUtils.Companion.count(YDL_USER_ASK_QUESTIONS_BUTTON_CLICK);
            if (DynamicIn.INSTANCE.loginByOneKeyLogin(getActivity(), true)) {
                trendsAndQuestionDialog = new TrendsAndQuestionDialog(requireContext(), new TrendsQuestionListener() {
                    @Override
                    public void publishTrends() {
                        //发布动态
                        Intent intent = new Intent(getActivity().getApplicationContext(), PublishTrendActivity.class);
                        //默认改为今日打卡
                        Bundle bundle = new Bundle();
                        bundle.putString(DynamicConstants.PUBLISH_TYPE, "topic_publish");
                        bundle.putString("topic_id", "44");
                        bundle.putString("topic_title", "今日打卡");
                        bundle.putInt("dynamic_question", 1);
                        intent.putExtra("bundle", bundle);
                        startActivity(intent);
//                        PublishTrendActivityTrends.Companion.start(requireContext(),"44","今日打卡");
                        trendsAndQuestionDialog.dismiss();
                    }

                    @Override
                    public void publishQuestion() {
                        //提问题
                        Intent intent = new Intent(getActivity().getApplicationContext(), PublishTrendActivity.class);
                        //默认改为今日打卡
                        Bundle bundle = new Bundle();
                        bundle.putString(DynamicConstants.PUBLISH_TYPE, "topic_publish");
                        bundle.putString("topic_id", "44");
                        bundle.putString("topic_title", "今日打卡");
                        bundle.putInt("dynamic_question", 2);
                        intent.putExtra("bundle", bundle);
                        startActivity(intent);
                        trendsAndQuestionDialog.dismiss();
                    }
                });
                trendsAndQuestionDialog.show();
            }
        } else if (view.getId() == R.id.trends_tv_mind_more) {
            ActionCountUtils.Companion.count(YDL_USER_THOUGHTS_GROUP_MORE_CLICK);
            Intent intent = new Intent(getActivity(), AllTopicActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
//        else if (view.getId() == R.id.iv_background) {
//            YDLRouterManager.Companion.router(IYDLRouterConstant.ROUTER_FM_LIST);
//        }
    }

    @Override
    public void onFetchedDatas(Fragment[] fragments) {
        mFragments = fragments;
        initViewPager();
    }

    public void setBannerData(List<TrendsListBean.Banner> list) {
        v_banner.initData(list);
    }

    @Override
    public void onFetchedDataFailed() {

    }

    public void displayShowCase() {
    }

    @Override
    public void onRefresh() {
        swl.setRefreshing(true);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                ((TrendsContentListFragment) mFragments[vpContent.getCurrentItem()]).onRefresh();
                swl.setRefreshing(false);
            }
        }, 300);
    }

    public void showMindsGroup(TopicListDataBean topicListDatas) {
        if (topicListDatas.list == null || topicListDatas.list.size() <= 0) {
            return;
        }
        for (int i = 0; i < 3 && i < topicListDatas.list.size(); i++) {
            switch (i) {
                case 0:
                    GlideApp.with(this)
                            .load(topicListDatas.list.get(i).getImg_bg_url())
                            .centerCrop()
                            .transform(new RoundedCornersTransformation(20, 0, RoundedCornersTransformation.CornerType.LEFT))
                            .into(topicRoundIv1);
                    trendsTopicTv1.setText(topicListDatas.list.get(i).getTopic_title());
                    frlTopicIv1.setOnClickListener(view -> {
                        mindTopicClick(topicListDatas.list.get(0).getTopic_title(), topicListDatas.list.get(0).getTopic_id(), trendsTopicTv1.getText().toString());
                    });
                    break;
                case 1:
                    GlideApp.with(this)
                            .load(topicListDatas.list.get(i).getImg_bg_url())
                            .centerCrop()
                            .transform(new RoundedCornersTransformation(20, 0, RoundedCornersTransformation.CornerType.TOP_RIGHT))
                            .into(topicRoundIv2);
                    trendsTopicTv2.setText(topicListDatas.list.get(i).getTopic_title());
                    frlTopicIv2.setOnClickListener(view -> {
                        mindTopicClick(topicListDatas.list.get(1).getTopic_title(), topicListDatas.list.get(1).getTopic_id(), trendsTopicTv2.getText().toString());
                    });
                    break;
                case 2:
                    GlideApp.with(this)
                            .load(topicListDatas.list.get(i).getImg_bg_url())
                            .centerCrop()
                            .transform(new RoundedCornersTransformation(20, 0, RoundedCornersTransformation.CornerType.BOTTOM_RIGHT))
                            .into(topicRoundIv3);
                    trendsTopicTv3.setText(topicListDatas.list.get(i).getTopic_title());
                    frlTopicIv3.setOnClickListener(view -> {
                        mindTopicClick(topicListDatas.list.get(2).getTopic_title(), topicListDatas.list.get(2).getTopic_id(), trendsTopicTv3.getText().toString());
                    });
                    break;
            }
        }


    }

    private void mindTopicClick(String title, String id, String imgName) {
        BuryPointUtils.getInstance().createMap()
                .put("theme_name", title)
                .put("theme_ID", id)
                .burryPoint("Theme_click");
        ActionCountUtils.Companion.count(YDL_USER_THOUGHTS_GROUP_TYPE_CLICK, imgName);
        Intent intent = new Intent();
        intent.setClass(getActivity(), TopicDetailActivity.class);
        intent.putExtra("topic_id", id);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getActivity().startActivity(intent);
    }

    public void showTopTrend(List<TrendsListBean.ExtData> extDatas) {
        mLooperTextView.setTipList(extDatas);
    }

    public void setGoneLooperTextView() {
        mLooperTextView.setVisibility(View.GONE);
    }

    private void bindView(View bindSource) {
        swl = bindSource.findViewById(R.id.trend_home_swl);
        vpContent = bindSource.findViewById(R.id.vp_content);
        topicRoundIv1 = bindSource.findViewById(R.id.trends_topic_iv1);
        topicRoundIv2 = bindSource.findViewById(R.id.trends_topic_iv2);
        topicRoundIv3 = bindSource.findViewById(R.id.trends_topic_iv3);
        mConstraintLayout = bindSource.findViewById(R.id.trends_home_csl);
        tvMindGroup = bindSource.findViewById(R.id.trends_tv_mind_group);
        tvMindMore = bindSource.findViewById(R.id.trends_tv_mind_more);
        frlTopicIv3 = bindSource.findViewById(R.id.frl_topic_iv3);
        frlTopicIv2 = bindSource.findViewById(R.id.frl_topic_iv2);
        frlTopicIv1 = bindSource.findViewById(R.id.frl_topic_iv1);
        mAppBarLayout = bindSource.findViewById(R.id.trends_home_appBar);
        mItemRecommendTv = bindSource.findViewById(R.id.item_recommend_tv);
        mItemHotTv = bindSource.findViewById(R.id.item_hot_tv);
        mItemFocusTv = bindSource.findViewById(R.id.item_focus_tv);
        trendsTopicTv3 = bindSource.findViewById(R.id.trends_topic_tv3);
        trendsTopicTv2 = bindSource.findViewById(R.id.trends_topic_tv2);
        trendsTopicTv1 = bindSource.findViewById(R.id.trends_topic_tv1);
        mPublishTrendButton = bindSource.findViewById(R.id.publish_trend_btn);
        mLooperTextView = bindSource.findViewById(R.id.ternd_loop_tv);
        mToolBarTv = bindSource.findViewById(R.id.toolbar_tv);
        v_banner = bindSource.findViewById(R.id.v_banner);
        tvMindMore.setOnClickListener(v -> {
            doClick(v);
        });
        mPublishTrendButton.setOnClickListener(v -> {
            doClick(v);
        });
        mItemRecommendTv.setOnClickListener(v -> {
            doClick(v);
        });
        mItemHotTv.setOnClickListener(v -> {
            doClick(v);
        });
        mItemFocusTv.setOnClickListener(v -> {
            doClick(v);
        });
    }
}
