package com.pedrocarrillo.expensetracker.ui.expenses;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.pedrocarrillo.expensetracker.R;
import com.pedrocarrillo.expensetracker.entities.Expense;
import com.pedrocarrillo.expensetracker.interfaces.IExpensesType;
import com.pedrocarrillo.expensetracker.interfaces.IUserActionsMode;
import com.pedrocarrillo.expensetracker.ui.BaseFragment;
import com.pedrocarrillo.expensetracker.utils.DateUtils;
import com.pedrocarrillo.expensetracker.utils.RealmManager;
import com.pedrocarrillo.expensetracker.utils.Util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class ExpenseDetailFragment extends BaseFragment implements View.OnClickListener {
public static final String EXPENSE_ID_KEY = "_expense_id";
public static final int RQ_EDIT_EXPENSE = 1001;
private BarChart bcWeekExpenses;
private Expense expense;
static ExpenseDetailFragment newInstance(String id) {
ExpenseDetailFragment expenseDetailFragment = new ExpenseDetailFragment();
Bundle bundle = new Bundle();
bundle.putString(EXPENSE_ID_KEY, id);
expenseDetailFragment.setArguments(bundle);
return expenseDetailFragment;
}
public ExpenseDetailFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = onCreateFragmentView(R.layout.fragment_expense_detail, inflater, container, true);
bcWeekExpenses = (BarChart) rootView.findViewById(R.id.bc_expenses);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (getArguments() != null && getArguments().containsKey(EXPENSE_ID_KEY)) {
setTitle(getString(R.string.expense_detail));
String id = getArguments().getString(EXPENSE_ID_KEY);
if( id != null) {
expense = (Expense) RealmManager.getInstance().findById(Expense.class, id);
loadData();
setWeekChart();
}
}
}
private void loadData() {
TextView tvExpenseTotal = ((TextView)getView().findViewById(R.id.tv_total));
tvExpenseTotal.setText(Util.getFormattedCurrency(expense.getTotal()));
tvExpenseTotal.setTextColor(getResources().getColor(expense.getType() == IExpensesType.MODE_EXPENSES ? R.color.colorAccentRed : R.color.colorAccentGreen));
((TextView)getView().findViewById(R.id.tv_category)).setText(String.valueOf(expense.getCategory().getName()));
((TextView)getView().findViewById(R.id.tv_description)).setText(String.valueOf(expense.getDescription()));
((TextView)getView().findViewById(R.id.tv_date)).setText(Util.formatDateToString(expense.getDate(), Util.getCurrentDateFormat()));
(getView().findViewById(R.id.fab_edit)).setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.fab_edit) {
onEditExpense();
}
}
private void onEditExpense() {
NewExpenseFragment newExpenseFragment = NewExpenseFragment.newInstance(IUserActionsMode.MODE_UPDATE, expense.getId());
newExpenseFragment.setTargetFragment(this, RQ_EDIT_EXPENSE);
newExpenseFragment.show(getChildFragmentManager(), "EDIT_EXPENSE");
}
private void setWeekChart() {
List<Date> dateList = DateUtils.getWeekDates();
List<String> days = new ArrayList<>();
Collections.sort(dateList);
List<BarEntry> entriesPerDay = new ArrayList<>();
for (int i=0; i < dateList.size(); i++) {
Date date = dateList.get(i);
String day = Util.formatDateToString(date, "EEE");
float value = Expense.getCategoryTotalByDate(date, expense.getCategory());
days.add(day);
entriesPerDay.add(new BarEntry(value, i));
}
BarDataSet dataSet = new BarDataSet(entriesPerDay, getString(R.string.this_week));
dataSet.setColors(Util.getListColors());
BarData barData = new BarData(days, dataSet);
bcWeekExpenses.setVisibleXRangeMaximum(5);
bcWeekExpenses.getAxisLeft().setDrawGridLines(false);
bcWeekExpenses.getXAxis().setDrawGridLines(false);
bcWeekExpenses.getAxisRight().setDrawGridLines(false);
bcWeekExpenses.getAxisRight().setDrawLabels(false);
bcWeekExpenses.setData(barData);
bcWeekExpenses.setDescription("");
bcWeekExpenses.animateY(2000);
bcWeekExpenses.invalidate();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RQ_EDIT_EXPENSE && resultCode == Activity.RESULT_OK) {
loadData();
bcWeekExpenses.notifyDataSetChanged();
bcWeekExpenses.invalidate();
setWeekChart();
}
}
}