package com.monitorabrasil.participacidadao.views;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ProgressBar;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.data.BarEntry;
import com.monitorabrasil.participacidadao.R;
import com.monitorabrasil.participacidadao.actions.ActionsCreator;
import com.monitorabrasil.participacidadao.dispatcher.Dispatcher;
import com.monitorabrasil.participacidadao.model.Grafico;
import com.monitorabrasil.participacidadao.stores.CamaraStore;
import com.monitorabrasil.participacidadao.views.adapters.GastoAdapter;
import com.parse.ParseObject;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
public class CamaraActivity extends AppCompatActivity {
protected BarChart mChart;
private HashMap<String,HashMap<String, Float>> dataset = new HashMap<String,HashMap<String, Float>>();
private HashMap<String,Float> valorTotal = new HashMap<String,Float>();
ArrayList<String> xVals = new ArrayList<String>();
ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
private RecyclerView mRecyclerView;
private GastoAdapter mAdapter;
List<Grafico> myDataset=new ArrayList<Grafico>();
List<String> tipos = new ArrayList<String>();
int[] cores = new int[]{R.color.cor1, R.color.cor2,R.color.cor3, R.color.cor4,R.color.cor5, R.color.cor6,
R.color.cor7, R.color.cor8,R.color.cor9, R.color.cor10};
private ProgressBar pb;
private Dispatcher dispatcher;
private ActionsCreator actionsCreator;
private CamaraStore camaraStore;
public CamaraActivity() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camara);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Dispatcher dispatcher = Dispatcher.get(new Bus());
ActionsCreator actionsCreator = ActionsCreator.get(dispatcher);
ParseObject cidade = actionsCreator.buscaCidade();
if(cidade == null){
//abrir a activity para escolher a cidade
startActivity(new Intent(getApplicationContext(), CidadeActivity.class));
}else {
toolbar.setSubtitle(cidade.getString("municipio") + "-" + cidade.getString("UF"));
}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
initDependencies();
setupView();
actionsCreator.getGastos();
}
private void initDependencies() {
dispatcher = Dispatcher.get(new Bus());
actionsCreator = ActionsCreator.get(dispatcher);
camaraStore = CamaraStore.get(dispatcher);
}
private void setupView() {
pb = (ProgressBar) findViewById(R.id.progressBar);
//tableview
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(llm);
}
private void buscaGastos() {
Iterator<ParseObject> gastoIt = camaraStore.getGastos().iterator();
while (gastoIt.hasNext()) {
ParseObject g = gastoIt.next();
String mes = g.getString("mes");
Float novoValor = Float.valueOf(g.getString("valor"));
String tipo = g.getString("tipo");
if(!tipos.contains(tipo)){
tipos.add(tipo);
}
//verifica tipo
HashMap<String,Float> data = dataset.get(tipo);
if(data != null){
//verifica se tem o valor por mes
Float valorMesTipo = data.get(mes);
if(valorMesTipo != null){
valorMesTipo = valorMesTipo +novoValor;
data.remove(mes);
data.put(mes, valorMesTipo);
}else{
data.put(mes,novoValor);
}
}else{
data = new HashMap<String, Float>();
data.put(mes,novoValor);
dataset.put(tipo,data);
}
Float valor = valorTotal.get(mes);
if (valor != null) {
valor = valor + novoValor;
valorTotal.remove(mes);
valorTotal.put(mes, valor);
} else {
valorTotal.put(mes, novoValor);
}
if (!xVals.contains(mes)) {
xVals.add(mes);
}
//
}
for (int j = 0; j < xVals.size(); j++) {
Float val = valorTotal.get(xVals.get(j));
yVals1.add(new BarEntry(val, j));
}
Grafico grafico = new Grafico("Todos", yVals1, xVals, R.color.cor10);
myDataset.add(grafico);
//adicionar os outros graficos
for(int i=0; i < tipos.size();i++ ){
HashMap<String,Float> temp = dataset.get(tipos.get(i));
ArrayList<String> x = new ArrayList<String>();
for ( int k=0; k < temp.size(); k++ ) {
x.add(k,"");
}
ArrayList<BarEntry> y = new ArrayList<BarEntry>();
for ( String mes : temp.keySet() ) {
if(!x.contains(mes)) {
int pos = buscaPosicao(mes);
// if(x.size()==(pos-1)){
x.remove(pos);
x.add(pos, mes);
// }
}
Float val = temp.get(mes);
y.add(new BarEntry(val, x.indexOf(mes)));
}
myDataset.add(new Grafico(tipos.get(i),y,x,cores[i]));
}
carregaList();
pb.setVisibility(View.INVISIBLE);
// setData();
}
@Subscribe
public void onTodoStoreChange(CamaraStore.CamaraStoreChangeEvent event) {
buscaGastos();
}
@Override
public void onResume() {
super.onResume();
dispatcher.register(this);
dispatcher.register(camaraStore);
}
@Override
public void onPause() {
super.onPause();
dispatcher.unregister(this);
dispatcher.unregister(camaraStore);
}
private int buscaPosicao(String mes) {
int ret=0;
switch (mes){
case "JAN":
ret=0;
break;
case "FEV":
ret=1;
break;
case "MAR":
ret=2;
break;
case "ABR":
ret=3;
break;
case "MAI":
ret=4;
break;
case "JUN":
ret=5;
break;
case "JUL":
ret=6;
break;
case "AGO":
ret=7;
break;
case "SET":
ret=8;
break;
case "OUT":
ret=9;
break;
case "NOV":
ret=10;
break;
case "DEZ":
ret=11;
break;
}
return ret;
}
public void carregaList(){
mAdapter = new GastoAdapter(myDataset);
// mAdapter.setRecyclerViewOnClickListenerHack(this);
mRecyclerView.setAdapter(mAdapter);
// pb.setVisibility(View.INVISIBLE);
}
}