// Copyright (C) 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.reviewit;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.annotation.DrawableRes;
import android.support.annotation.StringRes;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;

import com.google.reviewit.app.ReviewItBaseActivity;
import com.google.reviewit.util.WidgetUtil;

import java.util.ArrayList;
import java.util.List;

import static com.google.common.base.Preconditions.checkNotNull;

public class MainActivity extends ReviewItBaseActivity {
  private DrawerLayout drawer;
  private ActionBarDrawerToggle toggle;
  private ListView list;
  private List<Item> items;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .permitAll().build());

    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
      getSupportActionBar().setHomeButtonEnabled(true);
    }

    drawer = (DrawerLayout) findViewById(R.id.drawer);
    list = (ListView) findViewById(R.id.mainList);

    items = new ArrayList<>();
    items.add(new Item(SortChangesFragment.class, R.string.app_menu_sort,
        R.drawable.ic_star_white_16dp, null));
    items.add(new Item(ReviewChangesFragment.class, R.string.app_menu_review,
        R.drawable.ic_feedback_white_18dp, null));
    items.add(new Item(SettingsFragment.class, R.string.app_menu_settings,
        R.drawable.ic_settings_white_18dp, null));

    list.setAdapter(new BaseAdapter() {
      @Override
      public int getCount() {
        return items.size();
      }

      @Override
      public Object getItem(int position) {
        return items.get(position);
      }

      @Override
      public long getItemId(int position) {
        return position;
      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
          convertView = ((LayoutInflater) MainActivity.this.getSystemService
              (Activity.LAYOUT_INFLATER_SERVICE)).inflate(
                  R.layout.main_list_item, null);
        }

        Item item = items.get(position);

        ((ImageView) convertView.findViewById(R.id.mainListItemIcon))
            .setImageResource(item.iconId);
        WidgetUtil.setText(convertView, R.id.mainListItemTitle,
            getString(item.titleId));

        if (item.count != null) {
          WidgetUtil.setText(convertView, R.id.mainListItemCounter,
              item.count.toString());
        } else {
          convertView.findViewById(R.id.mainListItemCounter)
              .setVisibility(View.GONE);
        }

        return convertView;
      }
    });

    toggle = new ActionBarDrawerToggle(this, drawer, R.string.app_name,
        R.string.app_name) {
      public void onDrawerClosed(View view) {
        invalidateOptionsMenu();
      }

      public void onDrawerOpened(View drawerView) {
        invalidateOptionsMenu();
      }
    };
    drawer.setDrawerListener(toggle);

    list.setOnItemClickListener(new ListView.OnItemClickListener() {
      @Override
      public void onItemClick(
          AdapterView<?> parent, View view, int position, long id) {
        displayView(position);
      }
    });

    if (getApp().getPrefs().showIntro) {
      displayView(new IntroFragment1());
    } else if (savedInstanceState == null) {
      switch (getApp().getPrefs().startScreen) {
        case REVIEW_SCREEN:
          displayView(1);
          break;
        case SORT_SCREEN:
        default:
          displayView(0);
          break;
      }
    }
  }

  private void displayView(int position) {
    if (position < items.size()) {
      Item item = items.get(position);
      displayView(newFragmentInstance(item.fragmentClass), position);
      return;
    }
    throw new IllegalStateException("view not found: " + position);
  }

  private void displayView(Fragment fragment, int position) {
    displayView(fragment);

    Item item = items.get(position);
    checkNotNull(item);
    list.setItemChecked(position, true);
    list.setSelection(position);
    setTitle(getString(item.titleId));
    drawer.closeDrawer(list);
  }

  private void displayView(Fragment fragment) {
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction()
        .replace(R.id.mainFrame, fragment)
        .addToBackStack(null)
        .commit();
  }

  private Fragment newFragmentInstance(
      Class<? extends Fragment> fragmentClass) {
    try {
      return fragmentClass.newInstance();
    } catch (IllegalAccessException e) {
      throw new IllegalStateException(e);
    } catch (InstantiationException e) {
      throw new IllegalStateException(e);
    }
  }

  public void select(Class<? extends Fragment> fragmentClass) {
    for (Item item : items) {
      if (item.fragmentClass.equals(fragmentClass)) {
        list.setItemChecked(items.indexOf(item), true);
      }
    }
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    if (toggle.onOptionsItemSelected(item)) {
      return true;
    }
    return super.onOptionsItemSelected(item);
  }

  @Override
  public void setTitle(CharSequence title) {
    if (getSupportActionBar() != null) {
      getSupportActionBar().setTitle(title);
    }
  }

  @Override
  protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    toggle.syncState();
  }

  @Override
  public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    toggle.onConfigurationChanged(newConfig);
  }

  @Override
  public boolean dispatchTouchEvent(MotionEvent event) {
    Fragment fragment = getFragmentManager().findFragmentById(R.id.mainFrame);
    if (fragment instanceof DispatchTouchEventAware) {
      ((DispatchTouchEventAware) fragment).dispatchTouchEvent(event);
    }

    return super.dispatchTouchEvent(event);
  }

  @Override
  public void onBackPressed() {
    Fragment fragment = getFragmentManager().findFragmentById(R.id.mainFrame);
    if (fragment instanceof OnBackPressedAware) {
      if (((OnBackPressedAware) fragment).onBackPressed()) {
        return;
      }
    }

    getFragmentManager().executePendingTransactions();
    int count = getFragmentManager().getBackStackEntryCount();
    if (count == 0) {
      super.onBackPressed();
    } else {
      getFragmentManager().popBackStack();
    }
  }

  private class Item {
    final Class<? extends Fragment> fragmentClass;
    final
    @StringRes
    int titleId;
    final
    @DrawableRes
    int iconId;
    Integer count;

    Item(Class<? extends Fragment> fragmentClass, @StringRes int titleId,
         @DrawableRes int iconId, Integer count) {
      this.fragmentClass = fragmentClass;
      this.titleId = titleId;
      this.iconId = iconId;
      this.count = count;
    }
  }
}
