package com.pedrocarrillo.expensetracker.utils;
import android.content.Intent;
import android.util.SparseBooleanArray;
import com.pedrocarrillo.expensetracker.ExpenseTrackerApp;
import com.pedrocarrillo.expensetracker.entities.Category;
import com.pedrocarrillo.expensetracker.entities.Expense;
import com.pedrocarrillo.expensetracker.interfaces.IDateMode;
import com.pedrocarrillo.expensetracker.interfaces.IExpensesType;
import com.pedrocarrillo.expensetracker.widget.ExpensesWidgetProvider;
import com.pedrocarrillo.expensetracker.widget.ExpensesWidgetService;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author pcarrillo on 16/10/2015.
*/
public class ExpensesManager {
private List<Expense> mExpensesList = new ArrayList<>();
private SparseBooleanArray mSelectedExpensesItems = new SparseBooleanArray();
private static ExpensesManager ourInstance = new ExpensesManager();
public static ExpensesManager getInstance() {
return ourInstance;
}
private ExpensesManager() {
}
public void setExpensesList(Date dateFrom, Date dateTo, @IExpensesType int type, Category category) {
mExpensesList = Expense.getExpensesList(dateFrom, dateTo, type, category);
resetSelectedItems();
}
public void setExpensesListByDateMode(@IDateMode int mCurrentDateMode) {
switch (mCurrentDateMode) {
case IDateMode.MODE_TODAY:
mExpensesList = Expense.getTodayExpenses();
break;
case IDateMode.MODE_WEEK:
mExpensesList = Expense.getWeekExpenses();
break;
case IDateMode.MODE_MONTH:
mExpensesList = Expense.getMonthExpenses();
break;
}
}
public List<Expense> getExpensesList() {
return mExpensesList;
}
public SparseBooleanArray getSelectedExpensesItems() {
return mSelectedExpensesItems;
}
public void resetSelectedItems() {
mSelectedExpensesItems.clear();
}
public List<Integer> getSelectedExpensesIndex() {
List<Integer> items = new ArrayList<>(mSelectedExpensesItems.size());
for (int i = 0; i < mSelectedExpensesItems.size(); ++i) {
items.add(mSelectedExpensesItems.keyAt(i));
}
return items;
}
public void eraseSelectedExpenses() {
boolean isToday = false;
List<Expense> expensesToDelete = new ArrayList<>();
for (int position : getSelectedExpensesIndex()) {
Expense expense = mExpensesList.get(position);
expensesToDelete.add(expense);
Date expenseDate = expense.getDate();
// update widget if the expense is created today
if (DateUtils.isToday(expenseDate)) {
isToday = true;
}
}
if (isToday) {
Intent i = new Intent(ExpenseTrackerApp.getContext(), ExpensesWidgetProvider.class);
i.setAction(ExpensesWidgetService.UPDATE_WIDGET);
ExpenseTrackerApp.getContext().sendBroadcast(i);
}
RealmManager.getInstance().delete(expensesToDelete);
}
public void setSelectedItems(SparseBooleanArray selectedItems) {
this.mSelectedExpensesItems = selectedItems;
}
}