/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014-2015 Umeng, Inc
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package com.umeng.comm.ui.activities;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.IntentFilter;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.content.LocalBroadcastManager;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

import com.umeng.comm.core.beans.CommConfig;
import com.umeng.comm.core.beans.CommUser;
import com.umeng.comm.core.beans.MessageCount;
import com.umeng.comm.core.constants.Constants;
import com.umeng.comm.core.listeners.Listeners.OnResultListener;
import com.umeng.comm.core.utils.ResFinder;
import com.umeng.comm.ui.fragments.FavoritesFragment;
import com.umeng.comm.ui.fragments.FriendsFragment;
import com.umeng.comm.ui.fragments.NearbyFeedFragment;
import com.umeng.comm.ui.fragments.RealTimeFeedFragment;
import com.umeng.comm.ui.fragments.RecommendTopicFragment;
import com.umeng.comm.ui.fragments.RecommendUserFragment;

/**
 * 发现的Activity
 */
public class FindActivity extends BaseFragmentActivity implements OnClickListener {

    private CommUser mUser;
    private String mContainerClass;
    private RecommendTopicFragment mRecommendTopicFragment;
    private RecommendUserFragment mRecommendUserFragment;
    private FriendsFragment mFriendsFragment;
    private NearbyFeedFragment mNearbyFeedFragment;
    private FavoritesFragment mFavoritesFragment;
    private RealTimeFeedFragment mRealTimeFeedFragment;
    private MessageCount mUnReadMsg;
    private View mMsgBadgeView;
    private View mNotifyBadgeView;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(ResFinder.getLayout("umeng_comm_find_layout"));
        findViewById(ResFinder.getId("umeng_comm_title_back_btn")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_topic_recommend")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_user_recommend")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_usercenter_recommend")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_setting_recommend")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_friends")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_nearby_recommend")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_favortes")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_notification")).setOnClickListener(this);
        findViewById(ResFinder.getId("umeng_comm_realtime")).setOnClickListener(this);
        // 右上角的通知
        findViewById(ResFinder.getId("umeng_comm_title_notify_btn")).setOnClickListener(this);
        // 未读消息红点
        mMsgBadgeView = findViewById(ResFinder.getId("umeng_comm_notify_badge_view"));
        mMsgBadgeView.setVisibility(View.GONE);

        // 未读系统通知的红点
        mNotifyBadgeView = findViewById(ResFinder.getId("umeng_comm_badge_view"));

        TextView textView = (TextView) findViewById(ResFinder.getId("umeng_comm_title_tv"));
        textView.setText(ResFinder.getString("umeng_comm_find"));
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);

        parseIntentData();
        setupUnreadFeedMsgBadge();
        setupUnReadNotifyBadge();
        
        registerInitSuccessBroadcast();
    }

    private void parseIntentData() {
        mUser = getIntent().getExtras().getParcelable(Constants.TAG_USER);
        mContainerClass = getIntent().getExtras().getString(Constants.TYPE_CLASS);
        mUnReadMsg = CommConfig.getConfig().mMessageCount;
    }

    /**
     * 设置通知红点</br>
     */
    private void setupUnReadNotifyBadge() {
        if (mUnReadMsg.unReadNotice > 0) {
            mNotifyBadgeView.setVisibility(View.VISIBLE);
        } else {
            mNotifyBadgeView.setVisibility(View.INVISIBLE);
        }
    }

    /**
     * 设置消息数红点</br>
     */
    private void setupUnreadFeedMsgBadge() {
        if (mUnReadMsg.unReadTotal - mUnReadMsg.unReadNotice > 0) {
            mMsgBadgeView.setVisibility(View.VISIBLE);
        } else {
            mMsgBadgeView.setVisibility(View.GONE);
        }
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == ResFinder.getId("umeng_comm_title_back_btn")) { // 返回事件
            finish();
        } else if (id == ResFinder.getId("umeng_comm_friends")) {
            showFriendsFragment();
        } else if (id == ResFinder.getId("umeng_comm_topic_recommend")) { // 话题推荐
            showRecommendTopic();
        } else if (id == ResFinder.getId("umeng_comm_user_recommend")) { // 用户推荐
            showRecommendUserFragment();
        } else if (id == ResFinder.getId("umeng_comm_usercenter_recommend")) { // 个人中心
            gotoUserInfoActivity();
        } else if (id == ResFinder.getId("umeng_comm_nearby_recommend")) {
            showNearbyFeed();
        } else if (id == ResFinder.getId("umeng_comm_favortes")) {
            // 显示收藏的fragment
            showFavoritesFeed();
        } else if (id == ResFinder.getId("umeng_comm_notification")) {
            // 跳转到通知的Activity
            gotoFeedNewMsgActivity();
        } else if (id == ResFinder.getId("umeng_comm_setting_recommend")) {// 设置页面
            Intent setting = new Intent(this, SettingActivity.class);
            setting.putExtra(Constants.TYPE_CLASS, mContainerClass);
            startActivity(setting);
        } else if (id == ResFinder.getId("umeng_comm_title_notify_btn")) { // 点击右上角的通知
            gotoNotificationActivity();
        } else if (id == ResFinder.getId("umeng_comm_realtime")) { // 实时内容
            showRealTimeFeed();
        }
    }

    private void gotoNotificationActivity() {
        Intent intent = new Intent(FindActivity.this, NotificationActivity.class);
        intent.putExtra(Constants.USER, mUser);
        startActivity(intent);
    }

    private void gotoFeedNewMsgActivity() {
        Intent intent = new Intent(FindActivity.this, NewMsgActivity.class);
        intent.putExtra(Constants.USER, mUser);
        startActivity(intent);
    }

    @Override
    protected void onResume() {
        super.onResume();
        setupUnReadNotifyBadge();
        setupUnreadFeedMsgBadge();
    }

    /**
     * 跳转到用户中心Activity</br>
     */
    private void gotoUserInfoActivity() {
        Intent intent = new Intent(FindActivity.this, UserInfoActivity.class);
        if (mUser == null || TextUtils.isEmpty(mUser.id)) {// 来自开发者外部调用的情况
            intent.putExtra(Constants.TAG_USER, CommConfig.getConfig().loginedUser);
        } else {
            intent.putExtra(Constants.TAG_USER, mUser);
        }
        // intent.putExtra(Constants.TYPE_CLASS, mContainerClass); //
        // 设置页面需要此参数,由于个人中心设置被移到此页面,暂时不传递该参数
        startActivity(intent);
    }

    /**
     * 显示附件推荐Feed</br>
     */
    private void showNearbyFeed() {
        if (mNearbyFeedFragment == null) {
            mNearbyFeedFragment = NearbyFeedFragment.newNearbyFeedRecommend();
            mNearbyFeedFragment.setOnResultListener(new OnResultListener() {

                @Override
                public void onResult(int status) {
                    showFindPage();
                }
            });
        }
        showCommFragment(mNearbyFeedFragment);
    }

    /**
     * 显示实时内容的Fragment</br>
     */
    private void showRealTimeFeed() {
        if (mRealTimeFeedFragment == null) {
            mRealTimeFeedFragment = RealTimeFeedFragment.newRealTimeFeedRecommend();
            mRealTimeFeedFragment.setOnResultListener(new OnResultListener() {

                @Override
                public void onResult(int status) {
                    showFindPage();
                }
            });
        }
        showCommFragment(mRealTimeFeedFragment);
    }

    /**
     * 显示收藏Feed</br>
     */
    private void showFavoritesFeed() {
        if (mFavoritesFragment == null) {
            mFavoritesFragment = FavoritesFragment.newFavoritesFragment();
            mFavoritesFragment.setOnResultListener(new OnResultListener() {

                @Override
                public void onResult(int status) {
                    showFindPage();
                }
            });
        }
        showCommFragment(mFavoritesFragment);
    }

    /**
     * 显示推荐话题的Dialog</br>
     */
    private void showRecommendTopic() {
        if (mRecommendTopicFragment == null) {
            mRecommendTopicFragment = RecommendTopicFragment.newRecommendTopicFragment();
            mRecommendTopicFragment.setSaveButtonInVisiable();
            mRecommendTopicFragment.setOnDismissListener(new OnDismissListener() {

                @Override
                public void onDismiss(DialogInterface dialog) {
                    showFindPage();
                }
            });
        }
        showCommFragment(mRecommendTopicFragment);
    }

    /**
     * 隐藏发现页面,显示fragment</br>
     * 
     * @param fragment
     */
    private void showCommFragment(Fragment fragment) {
        findViewById(ResFinder.getId("umeng_comm_find_baset")).setVisibility(View.GONE);
        int container = ResFinder.getId("container");
        findViewById(container).setVisibility(View.VISIBLE);
        setFragmentContainerId(container);
        showFragmentInContainer(container, fragment);
    }

    /**
     * 隐藏fragment,显示发现页面</br>
     */
    private void showFindPage() {
        findViewById(ResFinder.getId("umeng_comm_find_baset")).setVisibility(
                View.VISIBLE);
        findViewById(ResFinder.getId("container")).setVisibility(View.GONE);
    }

    /**
     * 显示朋友圈Fragment</br>
     */
    private void showFriendsFragment() {
        if (mFriendsFragment == null) {
            mFriendsFragment = FriendsFragment.newFriendsFragment();
            mFriendsFragment.setOnResultListener(new OnResultListener() {

                @Override
                public void onResult(int status) {
                    showFindPage();
                }
            });
        }
        showCommFragment(mFriendsFragment);
    }

    /**
     * 显示推荐用户fragment</br>
     */
    private void showRecommendUserFragment() {
        if (mRecommendUserFragment == null) {
            mRecommendUserFragment = new RecommendUserFragment();
            mRecommendUserFragment.setSaveButtonInvisiable();
            mRecommendUserFragment.setOnResultListener(new OnResultListener() {

                @Override
                public void onResult(int status) {
                    showFindPage();
                }
            });
        }
        showCommFragment(mRecommendUserFragment);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK
                && findViewById(ResFinder.getId("container")).getVisibility() == View.VISIBLE) {
            findViewById(ResFinder.getId("umeng_comm_find_baset")).setVisibility(View.VISIBLE);
            findViewById(ResFinder.getId("container")).setVisibility(View.GONE);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
    /**
     * 注册登录成功时的广播</br>
     */
    private void registerInitSuccessBroadcast() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(Constants.ACTION_INIT_SUCCESS);
        LocalBroadcastManager.getInstance(this).registerReceiver(mInitConfigReceiver,
                filter);
    }

    private BroadcastReceiver mInitConfigReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            mUnReadMsg = CommConfig.getConfig().mMessageCount;
            setupUnReadNotifyBadge();
            setupUnreadFeedMsgBadge();
        }
    };

    @Override
    public void onDestroy() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mInitConfigReceiver);
        super.onDestroy();
    }
    
}