package com.yuyh.sprintnba.ui;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.TextUtils;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.facebook.drawee.view.SimpleDraweeView;
import com.yuyh.library.utils.DimenUtils;
import com.yuyh.library.utils.log.LogUtils;
import com.yuyh.library.view.viewpager.indicator.IndicatorViewPager;
import com.yuyh.library.view.viewpager.indicator.ScrollIndicatorView;
import com.yuyh.sprintnba.R;
import com.yuyh.sprintnba.base.BaseSwipeBackCompatActivity;
import com.yuyh.sprintnba.event.RefreshCompleteEvent;
import com.yuyh.sprintnba.event.RefreshEvent;
import com.yuyh.sprintnba.http.bean.match.MatchBaseInfo;
import com.yuyh.sprintnba.ui.adapter.VPGameDetailAdapter;
import com.yuyh.sprintnba.ui.presenter.impl.MatchDetailPresenter;
import com.yuyh.sprintnba.ui.view.MatchDetailView;
import com.yuyh.sprintnba.utils.FrescoUtils;
import com.yuyh.sprintnba.utils.StatusBarCompat;
import com.yuyh.sprintnba.widget.GameDetailScrollBar;
import com.yuyh.sprintnba.widget.StickyNavLayout;

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

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import butterknife.InjectView;

/**
 * @author yuyh.
 * @date 16/6/11.
 */
public class MatchDetailActivity extends BaseSwipeBackCompatActivity implements MatchDetailView, StickyNavLayout.OnStickStateChangeListener {

    public static final String INTENT_MID = "mid";
    public static final String INTENT_YEAR = "year";
    private String mid;
    private String year;

    public static void start(Context context, String mid, String year) {
        Intent intent = new Intent(context, MatchDetailActivity.class);
        intent.putExtra(MatchDetailActivity.INTENT_MID, mid);
        intent.putExtra(MatchDetailActivity.INTENT_YEAR, year);
        context.startActivity(intent);
    }

    @InjectView(R.id.snlViewPager)
    ViewPager viewPager;
    @InjectView(R.id.snlIindicator)
    ScrollIndicatorView indicator;
    @InjectView(R.id.stickyNavLayout)
    StickyNavLayout stickyNavLayout;

    @InjectView(R.id.rlMatchToolbar)
    RelativeLayout rlMatchToolbar;
    @InjectView(R.id.tvBack)
    TextView tvBack;
    @InjectView(R.id.tvMatchTitle)
    TextView tvMatchTitle;
    @InjectView(R.id.tvLeftRate)
    TextView tvLeftRate;
    @InjectView(R.id.tvMatchState)
    TextView tvMatchState;
    @InjectView(R.id.tvRightRate)
    TextView tvRightRate;
    @InjectView(R.id.tvMatchLeftScore)
    TextView tvMatchLeftScore;
    @InjectView(R.id.tvMatchType)
    TextView tvMatchType;
    @InjectView(R.id.tvMatchRightScore)
    TextView tvMatchRightScore;
    @InjectView(R.id.tvMatchStartTime)
    TextView tvMatchStartTime;

    @InjectView(R.id.ivMatchLeftTeam)
    SimpleDraweeView ivMatchLeftTeam;
    @InjectView(R.id.ivMatchRightTeam)
    SimpleDraweeView ivMatchRightTeam;

    @InjectView(R.id.swipeLayout)
    SwipeRefreshLayout swipeRefreshLayout;

    private IndicatorViewPager indicatorViewPager;
    private VPGameDetailAdapter adapter;
    private MatchDetailPresenter presenter;
    private boolean isNeedUpdateTab = true;

    private MatchBaseInfo.BaseInfo info;

    @Override
    protected int getContentViewLayoutID() {
        return R.layout.activity_game_detail;
    }

    @Override
    protected void initViewsAndEvents() {
        EventBus.getDefault().register(this);
        mid = getIntent().getStringExtra(INTENT_MID);
        year = getIntent().getStringExtra(INTENT_YEAR);
        LogUtils.i(year);

        //rlMatchToolbar.getBackground().setAlpha(0);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            rlMatchToolbar.getLayoutParams().height += StatusBarCompat.getStatusBarHeight(this);
            rlMatchToolbar.setPadding(0, StatusBarCompat.getStatusBarHeight(this), 0, 0);
        }

        indicator.setScrollBar(new GameDetailScrollBar(getApplicationContext(), ContextCompat.getColor(this, R.color.colorPrimary), DimenUtils.dpToPxInt(3)));
        indicatorViewPager = new IndicatorViewPager(indicator, viewPager);
        stickyNavLayout.setOnStickStateChangeListener(this);

        tvBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        swipeRefreshLayout.setColorSchemeResources(R.color.material_red, R.color.material_green);
        swipeRefreshLayout.setSize(SwipeRefreshLayout.DEFAULT);
        swipeRefreshLayout.setEnabled(true);
        swipeRefreshLayout.setOnRefreshListener(mOnRefreshListener);

        presenter = new MatchDetailPresenter(this, this);
        presenter.getMatchBaseInfo(mid);
    }

    @Override
    public void showTabViewPager(String[] names, boolean isStart) {
        isNeedUpdateTab = false;
        hideLoadingDialog();
        adapter = new VPGameDetailAdapter(this, names, getSupportFragmentManager(), mid, isStart, info);
        indicatorViewPager.setAdapter(adapter);
    }

    @Override
    public void showMatchInfo(MatchBaseInfo.BaseInfo info) {
        this.info = info;

        tvMatchTitle.setText(info.leftName + "vs" + info.rightName);
        if (!TextUtils.isEmpty(info.leftWins) && !TextUtils.isEmpty(info.leftLosses))
            tvLeftRate.setText(info.leftWins + "胜" + info.leftLosses + "负");
        if (!TextUtils.isEmpty(info.rightWins) && !TextUtils.isEmpty(info.rightLosses))
            tvRightRate.setText(info.rightWins + "胜" + info.rightLosses + "负");

        String startTime = info.startDate + info.startHour;
        SimpleDateFormat format = new SimpleDateFormat("yyyyMM月dd日HH:mm");
        // 当前比赛状态
        String state = "未开始";
        try {
            Date startDate = format.parse(year + startTime);
            Date todayDate = new Date();
            if (startDate.getTime() > todayDate.getTime()) { // 未开始
                if (isNeedUpdateTab) { // 更新TAB
                    presenter.getTab(false);
                }
            } else {
                state = info.quarterDesc;
                // 第四节 00:00 或 加时n 00:00 表示比赛已经结束
                if (((state.contains("第4节") || state.contains("加时"))
                        && !info.leftGoal.equals(info.rightGoal))
                        && state.contains("00:00")) {
                    state = "已结束";
                }
                if (isNeedUpdateTab) {
                    presenter.getTab(true);
                }
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }

        tvMatchState.setText(state);
        tvMatchType.setText(info.desc);
        tvMatchStartTime.setText(info.startDate + "   " + info.startHour + "   " + info.venue);
        tvMatchLeftScore.setText(info.leftGoal);
        tvMatchRightScore.setText(info.rightGoal);
        ivMatchLeftTeam.setController(FrescoUtils.getController(info.leftBadge, ivMatchLeftTeam));
        ivMatchRightTeam.setController(FrescoUtils.getController(info.rightBadge, ivMatchRightTeam));
    }

    private boolean lastIsTopHidden;//记录上次是否悬浮

    @Override
    public void isStick(boolean isStick) {
        if (lastIsTopHidden != isStick) {
            lastIsTopHidden = isStick;
        }
    }

    @Override
    public void scrollPercent(float percent) {
        int color = Color.argb((int) ((float) 255 * percent), 26, 142, 168);
        rlMatchToolbar.setBackgroundColor(color);
        if (percent == 0) {
            swipeRefreshLayout.setEnabled(true);
            swipeRefreshLayout.setOnRefreshListener(mOnRefreshListener);
        } else {
            swipeRefreshLayout.setEnabled(false);
            swipeRefreshLayout.setOnRefreshListener(null);
        }
    }

    @Override
    public void showLoading(String msg) {
        showLoadingDialog();
    }

    @Override
    public void hideLoading() {
        hideLoadingDialog();
    }

    @Override
    public void showError(String msg) {

    }

    @Subscribe
    public void onEventMainThread(RefreshCompleteEvent event) {
        swipeRefreshLayout.setRefreshing(false);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

    private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            presenter.getMatchBaseInfo(mid);
            EventBus.getDefault().post(new RefreshEvent());
        }
    };

}