package com.dalingge.gankio.module.main;

import android.content.res.Configuration;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatDelegate;
import android.view.Menu;
import android.view.MenuItem;

import com.dalingge.gankio.R;
import com.dalingge.gankio.common.base.BaseActivity;
import com.dalingge.gankio.common.factory.RequiresPresenter;
import com.dalingge.gankio.module.girl.GirlFragment;
import com.dalingge.gankio.module.home.gank.GankTadPageFragment;
import com.dalingge.gankio.module.read.ReadTadPageFragment;
import com.dalingge.gankio.module.video.VideoFragment;
import com.dalingge.gankio.network.RequestCommand;
import com.dalingge.gankio.network.RequestContext;
import com.dalingge.gankio.utils.PreferencesUtils;

import butterknife.BindView;


/**
 * FileName:MainActivity.java
 * Description:主页
 * Author:dingboyang
 * Email:[email protected]
 * Date:16/4/2
 */
@RequiresPresenter(MainPresenter.class)
public class MainActivity extends BaseActivity<MainPresenter> implements BottomNavigationView.OnNavigationItemSelectedListener{

    @BindView(R.id.buttonNavigationView)
    BottomNavigationView buttonNavigationView;

    private GankTadPageFragment mGankTadPageFragment;
    private ReadTadPageFragment mReadTadPageFragment;
    private GirlFragment mGirlFragment;
    private VideoFragment mVideoFragment;

    // 定义FragmentManager对象管理器
    private FragmentManager fragmentManager;

    @Override
    protected int getLayout() {
        return R.layout.activity_main;
    }

    @Override
    protected void initView() {
        getPresenter().request(new RequestContext(RequestCommand.REQUEST_RANDOM_GIRL));

        buttonNavigationView.setOnNavigationItemSelectedListener(this);
        fragmentManager = getSupportFragmentManager();
        setDefaultFragment(0);

    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.item_navigation_home:
                setDefaultFragment(0);
                break;
            case R.id.item_navigation_read:
                setDefaultFragment(1);
                break;
            case R.id.item_navigation_girl:
                setDefaultFragment(2);
                break;
            case R.id.item_navigation_video:
                setDefaultFragment(3);
                break;
        }
        return false;
    }

    /**
     * 设置默认的Fragment
     *
     * @param index 选项卡的标号:0, 1, 2, 3
     */
    private void setDefaultFragment(int index) {
        //开启事务
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        hideFragments(fragmentTransaction);
        switch (index) {
            case 0:
                if (mGankTadPageFragment == null) {
                    mGankTadPageFragment = GankTadPageFragment.newInstance(getString(R.string.button_navigation_home_text));
                    fragmentTransaction.add(R.id.contentLayout, mGankTadPageFragment);
                } else {
                    // 如果不为空,则直接将它显示出来
                    fragmentTransaction.show(mGankTadPageFragment);
                }
                break;
            case 1:
                if (mReadTadPageFragment == null) {
                    mReadTadPageFragment = ReadTadPageFragment.newInstance(getString(R.string.button_navigation_read_text));
                    fragmentTransaction.add(R.id.contentLayout, mReadTadPageFragment);
                } else {
                    // 如果不为空,则直接将它显示出来
                    fragmentTransaction.show(mReadTadPageFragment);
                }
                break;
            case 2:
                if (mGirlFragment == null) {
                    mGirlFragment = GirlFragment.newInstance(getString(R.string.button_navigation_girl_text));
                    fragmentTransaction.add(R.id.contentLayout, mGirlFragment);
                } else {
                    // 如果不为空,则直接将它显示出来
                    fragmentTransaction.show(mGirlFragment);
                }
                break;
            case 3:
                if (mVideoFragment == null) {
                    mVideoFragment = VideoFragment.newInstance(getString(R.string.button_navigation_video_text));
                    fragmentTransaction.add(R.id.contentLayout, mVideoFragment);
                } else {
                    // 如果不为空,则直接将它显示出来
                    fragmentTransaction.show(mVideoFragment);
                }
                break;
        }
        fragmentTransaction.commit();   // 事务提交
    }

    /**
     * 隐藏Fragment
     *
     * @param fragmentTransaction 事务
     */
    private void hideFragments(FragmentTransaction fragmentTransaction) {
        if (mGankTadPageFragment != null) {
            fragmentTransaction.hide(mGankTadPageFragment);
        }

        if (mReadTadPageFragment != null) {
            fragmentTransaction.hide(mReadTadPageFragment);
        }

        if (mGirlFragment != null) {
            fragmentTransaction.hide(mGirlFragment);
        }

        if (mVideoFragment != null) {
            fragmentTransaction.hide(mVideoFragment);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
//        MenuItem item = menu.findItem(R.id.action_day_night);
//        initNotifiableItemState(item);
        return true;
    }

    @Override
    protected void onResume() {
        super.onResume();
        int uiMode = getResources().getConfiguration().uiMode;
        int dayNightUiMode = uiMode & Configuration.UI_MODE_NIGHT_MASK;
        if (dayNightUiMode == Configuration.UI_MODE_NIGHT_NO) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        } else if (dayNightUiMode == Configuration.UI_MODE_NIGHT_YES) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        } else {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
        }
    }

    private void initNotifiableItemState(MenuItem item) {
        PreferencesUtils preferencesUtils = new PreferencesUtils(this);
        item.setChecked(preferencesUtils.getBoolean(R.string.action_day_night, false));
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
//        int id = item.getItemId();
//        switch (id) {
//            case R.id.action_day_night:
//                PreferencesUtils preferencesUtils = new PreferencesUtils(this);
//                if (item.isChecked()) {
//                    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
//                    preferencesUtils.saveBoolean(R.string.action_day_night, false);
//                } else {
//                    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
//                    preferencesUtils.saveBoolean(R.string.action_day_night, true);
//                }
//                getWindow().setWindowAnimations(R.style.WindowAnimationFadeInOut);
//                recreate();
//                return true;
//
//
//        }

        return super.onOptionsItemSelected(item);
    }

}