package com.client.tok.ui.home;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.PopupWindow;
import com.client.tok.R;
import com.client.tok.base.BaseCommonTitleActivity;
import com.client.tok.ui.contacts.ContactFragment;
import com.client.tok.ui.mine.MineFragment;
import com.client.tok.ui.recentmsg.RecentMsgFragment;
import com.client.tok.utils.LogUtil;
import com.client.tok.utils.ScreenUtils;
import com.client.tok.utils.ToastUtils;
import com.client.tok.widget.BottomTabView;
import com.client.tok.widget.HomeMenuWindow;
import com.client.tok.widget.dialog.DialogFactory;
import java.util.ArrayList;
import java.util.List;

public class HomeActivity extends BaseCommonTitleActivity
    implements HomeContract.IHomeView, View.OnClickListener {
    private String TAG = "TokHome";

    private HomeContract.IHomePresenter mPresenter;

    private BottomTabView mRecentMsgView;
    private BottomTabView mContactsView;
    private BottomTabView mMineView;
    private BottomTabView[] mBottomViews;
    private ViewPager mViewPager;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        initView();
        showFragments();
        new HomePresenter(this);
    }

    @Override
    protected void onResume() {
        LogUtil.i(TAG, "onResume");
        super.onResume();
        if (mPresenter != null) {
            mPresenter.onResume();
        }
    }

    public void initView() {
        mRecentMsgView = $(R.id.id_home_msg_rb);
        mContactsView = $(R.id.id_home_contacts_rb);
        mMineView = $(R.id.id_home_mine_rb);
        mViewPager = $(R.id.id_home_vp);
        mRecentMsgView.setOnClickListener(this);
        mContactsView.setOnClickListener(this);
        mMineView.setOnClickListener(this);
    }

    @Override
    public int getTitleGravity() {
        return GRAVITY_LEFT;
    }

    @Override
    public boolean isShowBackIcon() {
        return false;
    }

    @Override
    public boolean isSupportTaskBack() {
        return true;
    }

    @Override
    public int getToolBarStyle() {
        return TOOL_BAR_STYLE_WHITE_BIG;
    }

    @Override
    public int getTitleId() {
        return R.string.app_name;
    }

    @Override
    public int getMenuImgId() {
        return R.drawable.add;
    }

    @Override
    public void onMenuClick() {
        PopupWindow popupWindow = HomeMenuWindow.getHomeMenu(this.getActivity());
        popupWindow.showAsDropDown(mMenuLayout, 0, ScreenUtils.dimen2px(this, R.dimen.s_20));
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.id_home_msg_rb:
            case R.id.id_home_contacts_rb:
            case R.id.id_home_mine_rb:
                int tagPosition = Integer.valueOf((String) v.getTag());
                setViewPagerSelected(tagPosition);
                break;
        }
    }

    private void showFragments() {
        int size = 3;
        mBottomViews = new BottomTabView[size];
        mBottomViews[0] = mRecentMsgView;
        mBottomViews[1] = mContactsView;
        mBottomViews[2] = mMineView;

        List<Fragment> fragmentList = new ArrayList<>(size);
        //fragmentList.add(new RecentFragment());
        fragmentList.add(RecentMsgFragment.getInstance());
        fragmentList.add(ContactFragment.getInstance());
        fragmentList.add(MineFragment.getInstance());
        mViewPager.setOffscreenPageLimit(size);
        mViewPager.setAdapter(
            new ViewPagerFragmentAdapter(getSupportFragmentManager(), fragmentList, null));
        mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                setBottomMenuSelected(position);
            }
        });
    }

    private void setBottomMenuSelected(int position) {
        for (int i = 0; i < mBottomViews.length; i++) {
            if (i == position) {
                mBottomViews[i].setSelected(true);
            } else {
                mBottomViews[i].setSelected(false);
            }
        }
    }

    private void setViewPagerSelected(int position) {
        mViewPager.setCurrentItem(position, false);
    }

    @Override
    public void showFriendReqCount(int countReq) {
        mContactsView.setNewMsg(countReq);
    }

    @Override
    public void showUnReadMsg(int unReadMsgNum) {
        mRecentMsgView.setNewMsg(unReadMsgNum);
    }

    @Override
    public void showFindFriendBotFeature(String newContent) {
        mMineView.setNewFeature(newContent);
    }

    @Override
    public void showAddFriend(String friendPk) {
        DialogFactory.addFriendDialog(this, friendPk, null, true, null, null,
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ToastUtils.show(R.string.add_friend_request_has_send);
                    HomeActivity.this.viewDestroy();
                }
            });
    }

    @Override
    public void setPresenter(HomeContract.IHomePresenter iHomePresenter) {
        mPresenter = iHomePresenter;
    }

    @Override
    public Activity getActivity() {
        return this;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        viewDestroy();
        LogUtil.i(TAG, "home destroy");
    }

    @Override
    public void viewDestroy() {
        if (mPresenter != null) {
            mPresenter.onDestroy();
            mPresenter = null;
        }
    }
}