package org.gdg.frisbee.android.gde;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import org.gdg.frisbee.android.R;
import org.gdg.frisbee.android.api.Callback;
import org.gdg.frisbee.android.api.model.Gde;
import org.gdg.frisbee.android.api.model.GdeList;
import org.gdg.frisbee.android.app.App;
import org.gdg.frisbee.android.cache.ModelCache;
import org.gdg.frisbee.android.common.GdgNavDrawerActivity;
import org.joda.time.DateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
import butterknife.BindView;
public class GdeActivity extends GdgNavDrawerActivity implements ViewPager.OnPageChangeListener {
@BindView(R.id.pager)
ViewPager mViewPager;
@BindView(R.id.tabs)
TabLayout mTabLayout;
private GdeCategoryPagerAdapter mViewPagerAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gde);
App.from(this).getModelCache().getAsync(ModelCache.KEY_GDE_LIST, new ModelCache.CacheListener() {
@Override
public void onGet(Object item) {
GdeList directory = (GdeList) item;
setupGdeViewPager(directory);
}
@Override
public void onNotFound(String key) {
fetchGdeDirectory();
}
});
}
private void fetchGdeDirectory() {
App.from(this).getGdeDirectory().getDirectory().enqueue(new Callback<GdeList>() {
@Override
public void onSuccess(GdeList directory) {
App.from(GdeActivity.this).getModelCache().putAsync(ModelCache.KEY_GDE_LIST,
directory,
DateTime.now().plusDays(4));
setupGdeViewPager(directory);
}
@Override
public void onError() {
showError(R.string.fetch_gde_failed);
}
@Override
public void onNetworkFailure(Throwable error) {
showError(R.string.offline_alert);
}
});
}
private void setupGdeViewPager(GdeList directory) {
if (!isContextValid()) {
return;
}
SortedMap<String, GdeList> gdeMap = new TreeMap<>();
gdeMap.putAll(extractCategoriesFromGdeList(directory));
List<GdeCategory> gdeCategoryList = convertCategoryMapToList(gdeMap);
mViewPagerAdapter = new GdeCategoryPagerAdapter(
getSupportFragmentManager(),
getString(R.string.about),
gdeCategoryList
);
mViewPager.setAdapter(mViewPagerAdapter);
mViewPager.addOnPageChangeListener(this);
mTabLayout.setupWithViewPager(mViewPager);
}
private HashMap<String, GdeList> extractCategoriesFromGdeList(GdeList directory) {
HashMap<String, GdeList> gdeMap = new HashMap<>();
for (Gde gde : directory) {
if (gde.getProduct() == null) {
continue;
}
for (String p : gde.getProduct()) {
String product = p.trim();
if (!gdeMap.containsKey(product)) {
gdeMap.put(product, new GdeList());
}
gdeMap.get(product).add(gde);
}
}
return gdeMap;
}
private List<GdeCategory> convertCategoryMapToList(SortedMap<String, GdeList> gdeMap) {
List<GdeCategory> gdeCategoryList = new ArrayList<>();
for (String category : gdeMap.keySet()) {
GdeList gdeList = gdeMap.get(category);
gdeCategoryList.add(new GdeCategory(category, gdeList));
}
return gdeCategoryList;
}
@Override
protected String getTrackedViewName() {
return null;
}
@Override
public void onPageScrolled(int i, float v, int i2) {
}
@Override
public void onPageSelected(int position) {
trackView("GDE/" + mViewPagerAdapter.getPageTitle(position));
}
@Override
public void onPageScrollStateChanged(int i) {
}
}