package ch.swissonid.design_lib_sample;

import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.MenuItem;

import butterknife.Bind;
import butterknife.ButterKnife;
import ch.swissonid.design_lib_sample.fragments.BaseFragment;
import ch.swissonid.design_lib_sample.fragments.FlexibleSpaceFragment;
import ch.swissonid.design_lib_sample.fragments.FlexibleSpaceWithImageFragment;
import ch.swissonid.design_lib_sample.fragments.FloatingActionButtonFragment;
import ch.swissonid.design_lib_sample.fragments.OverlappingContentFragment;
import ch.swissonid.design_lib_sample.fragments.StandardAppBarFragment;
import ch.swissonid.design_lib_sample.fragments.tabs.TabHolderFragment;
import ch.swissonid.design_lib_sample.util.LogUtils;
import ch.swissonid.design_lib_sample.util.Navigator;

import static ch.swissonid.design_lib_sample.util.LogUtils.LOGD;

public class DrawerActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

    @Bind(R.id.drawer_layout)
    DrawerLayout mDrawerLayout;

    @Bind(R.id.navigation_view)
    NavigationView mNavigationView;

    private static Navigator mNavigator;
    private Toolbar mToolbar;
    private @IdRes int mCurrentMenuItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer);
        ButterKnife.bind(this);
        setupToolbar();
        setupNavDrawer();
        initNavigator();
        mCurrentMenuItem = R.id.standard_app_bar_menu_item;
        setNewRootFragment(StandardAppBarFragment.newInstance());
    }

    private void initNavigator() {
        if(mNavigator != null) return;
        mNavigator = new Navigator(getSupportFragmentManager(), R.id.container);
    }
    private void setNewRootFragment(BaseFragment fragment){
        if(fragment.hasCustomToolbar()){
            hideActionBar();
        }else {
            showActionBar();
        }
        mNavigator.setRootFragment(fragment);
        mDrawerLayout.closeDrawers();
    }

    private void setupToolbar() {
        mToolbar = ButterKnife.findById(this, R.id.toolbar);
        if(mToolbar == null) {
            LOGD(this, "Didn't find a toolbar");
            return;
        }
        setSupportActionBar(mToolbar);
        ActionBar actionBar = getSupportActionBar();
        if(actionBar == null) return;
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
    }

    private void hideActionBar(){
        ActionBar actionBar = getSupportActionBar();
        if(actionBar == null) return;
        actionBar.hide();
    }

    private void showActionBar() {
        ActionBar actionBar = getSupportActionBar();
        if(actionBar == null) return;
        actionBar.show();
    }

    private void setupNavDrawer() {
        if(mDrawerLayout == null) {
            LogUtils.LOGE(this, "mDrawerLayout is null - Can not setup the NavDrawer! Have you set the android.support.v7.widget.DrawerLayout?");
            return;
        }
        mNavigationView.setNavigationItemSelectedListener(this);
        LOGD(this, "setup setupNavDrawer");
    }

    public void openDrawer(){
        mDrawerLayout.openDrawer(Gravity.LEFT);
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) {
        @IdRes int id = menuItem.getItemId();
        if(id == mCurrentMenuItem) {
            mDrawerLayout.closeDrawers();
            return false;
        }
        switch (id){
            case R.id.standard_app_bar_menu_item:
                setNewRootFragment(StandardAppBarFragment.newInstance());
                break;
            case R.id.tabs_menu_item:
                setNewRootFragment(TabHolderFragment.newInstance());
                break;

            case R.id.parallax_menu_item:
                setNewRootFragment(FlexibleSpaceWithImageFragment.newInstance());
                break;

            case R.id.pinned_app_bar_menu_item:
                setNewRootFragment(FlexibleSpaceFragment.newInstance());
                break;

            case R.id.floating_action_button:
                setNewRootFragment(FloatingActionButtonFragment.newInstance());
                break;

            case R.id.overlapping_content_menu_item:
                setNewRootFragment(OverlappingContentFragment.newInstance());
                break;
        }
        mCurrentMenuItem = id;
        menuItem.setChecked(true);
        return false;
    }

    @Override
    public void finish() {
        mNavigator = null;
        super.finish();
    }
}