package com.code44.finance.ui.reports;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.code44.finance.R;
import com.code44.finance.adapters.ReportsAdapter;
import com.code44.finance.data.db.Tables;
import com.code44.finance.data.model.Currency;
import com.code44.finance.data.providers.TransactionsProvider;
import com.code44.finance.qualifiers.Main;
import com.code44.finance.utils.ActiveInterval;
import com.squareup.otto.Subscribe;
import javax.inject.Inject;
public class ReportsFragment extends BaseReportFragment implements LoaderManager.LoaderCallbacks<Cursor> {
private static final int LOADER_TRANSACTIONS = 1;
@Inject ActiveInterval activeInterval;
@Inject @Main Currency mainCurrency;
private ReportsAdapter adapter;
public static ReportsFragment newInstance() {
return new ReportsFragment();
}
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_reports, container, false);
}
@Override public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Get views
final RecyclerView recycler_V = (RecyclerView) view.findViewById(R.id.recycler);
// Setup
adapter = new ReportsAdapter(getActivity());
//recycler_V.setLayoutManager(new ListLayoutManager(getActivity(), TwoWayLayoutManager.Orientation.VERTICAL));
//recycler_V.addItemDecoration(new SpacingItemDecoration(getResources().getDimensionPixelSize(R.dimen.space_normal), getResources().getDimensionPixelSize(R.dimen.space_normal)));
recycler_V.setItemAnimator(new DefaultItemAnimator());
recycler_V.setAdapter(adapter);
}
@Override public void onResume() {
super.onResume();
getEventBus().register(this);
}
@Override public void onPause() {
super.onPause();
getEventBus().unregister(this);
}
@Override public Loader<Cursor> onCreateLoader(int id, Bundle args) {
switch (id) {
case LOADER_TRANSACTIONS:
return Tables.Transactions
.getQuery()
.selection(" and " + Tables.Transactions.DATE + " between ? and ?", String.valueOf(activeInterval.getInterval().getStartMillis()), String.valueOf(activeInterval.getInterval().getEndMillis() - 1))
.asCursorLoader(getActivity(), TransactionsProvider.uriTransactions());
}
return null;
}
@Override public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) {
switch (loader.getId()) {
case LOADER_TRANSACTIONS:
onTransactionsLoaded(cursor);
break;
}
}
@Override public void onLoaderReset(final Loader<Cursor> loader) {
}
@Subscribe public void onActiveIntervalChanged(ActiveInterval interval) {
getLoaderManager().restartLoader(LOADER_TRANSACTIONS, null, this);
}
private void onTransactionsLoaded(Cursor cursor) {
// final Map<Category, Long> expenses = new HashMap<>();
// if (cursor.moveToFirst()) {
// do {
// final Transaction transaction = Transaction.from(cursor);
// final Category category = transaction.getCategory();
// if (transaction.includeInReports() && transaction.getTransactionType() == TransactionType.Expense && transaction.getTransactionState() == TransactionState.Confirmed) {
// final Long amount;
// if (transaction.getAccountFrom().getCurrency().getId().equals(mainCurrency.getId())) {
// amount = transaction.getAmount();
// } else {
// amount = Math.round(transaction.getAmount() * transaction.getAccountFrom().getCurrency().getExchangeRate());
// }
//
// Long totalExpenseForCategory = expenses.get(category);
// if (totalExpenseForCategory == null) {
// totalExpenseForCategory = amount;
// } else {
// totalExpenseForCategory += amount;
// }
// expenses.put(category, totalExpenseForCategory);
// }
// } while (cursor.moveToNext());
// }
//
// final TreeMap<Category, Long> sortedExpenses = new TreeMap<>(new CategoryExpenseComparator(expenses));
// sortedExpenses.putAll(expenses);
// final PieChartData.Builder builder = PieChartData.builder();
// for (Category category : sortedExpenses.descendingKeySet()) {
// builder.addValues(new PieChartValue(sortedExpenses.get(category), category.getColor()));
// }
// final PieChartData pieChartData = builder.build();
// adapter.setCategoriesReportData(pieChartData);
}
}