package com.monitorabrasil.participacidadao.views.adapters;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.monitorabrasil.participacidadao.R;
import com.monitorabrasil.participacidadao.actions.ActionsCreator;
import com.monitorabrasil.participacidadao.application.MyApp;
import com.monitorabrasil.participacidadao.views.ComentarioActivity;
import com.monitorabrasil.participacidadao.views.interfaces.RecyclerViewOnClickListenerHack;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.parse.ParseUser;
import com.parse.SaveCallback;
import java.util.ArrayList;
import java.util.List;
/**
* Created by geral_000 on 25/06/2015.
*/
public class ProjetoAdapter extends RecyclerView.Adapter<ProjetoAdapter.ViewHolder> {
private static ActionsCreator actionsCreator;
private List<ParseObject> projetos;
private RecyclerViewOnClickListenerHack mRecyclerViewOnClickListenerHack;
public ProjetoAdapter(ActionsCreator actionsCreator) {
projetos = new ArrayList<>();
ProjetoAdapter.actionsCreator = actionsCreator;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
// create a new view
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_projeto, viewGroup, false);
// set the view's size, margins, paddings and layout parameter
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, int i) {
Drawable apoio = ContextCompat.getDrawable(MyApp.getInstance().getApplicationContext(), R.mipmap.ic_action_like_gray);
Drawable napoio = ContextCompat.getDrawable(MyApp.getInstance().getApplicationContext(), R.mipmap.ic_action_unlike_gray);
final Drawable napoioVermelho = ContextCompat.getDrawable(MyApp.getInstance().getApplicationContext(), R.mipmap.ic_action_unlike_red);
final Drawable apoioVerde = ContextCompat.getDrawable(MyApp.getInstance().getApplicationContext(), R.mipmap.ic_action_like_green);
viewHolder.btnConcordo.setBackground(apoio);
viewHolder.btnDiscordo.setBackground(napoio);
viewHolder.btnDiscordo.setEnabled(true);
viewHolder.btnConcordo.setEnabled(true);
viewHolder.voto = "sem_voto";
final ParseObject projeto = projetos.get(i);
viewHolder.projeto = projeto;
//verifica se ja votou
ParseQuery<ParseObject> query = ParseQuery.getQuery("Voto");
query.fromLocalDatastore();
query.whereEqualTo("projeto", projeto);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
if (list.size() > 0) {
String voto = list.get(0).get("voto").toString();
viewHolder.projetoVotado = list.get(0);
if (voto.equals("s")) {
viewHolder.btnConcordo.setBackground(apoioVerde);
viewHolder.btnConcordo.setEnabled(false);
viewHolder.voto = "apoioado";
;
} else {
viewHolder.btnDiscordo.setBackground(napoioVermelho);
viewHolder.btnDiscordo.setEnabled(false);
viewHolder.voto = "nao_apoioado";
}
}
}
});
viewHolder.numero.setText("ID: "+projeto.getString("numero"));
if(projeto.get("classificacao")!= null)
viewHolder.classificacao.setText(projeto.get("classificacao").toString());
else
viewHolder.classificacao.setVisibility(View.GONE);
if(projeto.get("data")!= null)
viewHolder.data.setText(projeto.get("data").toString());
else
viewHolder.data.setText(projeto.get("dtLeitura").toString());
viewHolder.descricao.setText(projeto.get("descricao").toString());
int numComentario = 0;
if(projeto.get("nr_comentarios") != null){
numComentario = Integer.valueOf( projeto.get("nr_comentarios").toString());
}
viewHolder.btnComentar.setText(String.valueOf(numComentario));
int num=0;
if(projeto.get("apoio") != null){
num = Integer.valueOf( projeto.get("apoio").toString());
}
viewHolder.numApoio.setText(String.valueOf(num));
num=0;
if(projeto.get("nao_apoio") != null){
num = Integer.valueOf( projeto.get("nao_apoio").toString());
}
viewHolder.numNaoApoio.setText(String.valueOf(num));
try {
if(projeto.getParseObject("politico")!= null) {
ParseObject autor = projeto.getParseObject("politico");
autor.fetchFromLocalDatastore();
viewHolder.autor.setText(autor.get("nome").toString());
}
} catch (ParseException e) {
e.printStackTrace();
}
viewHolder.btnConcordo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
registraVoto(v, projeto, "s", viewHolder);
}
});
viewHolder.btnDiscordo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registraVoto(v, projeto, "n", viewHolder);
}
});
viewHolder.btnComentar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent mIntent =new Intent(MyApp.getInstance().getApplicationContext(), ComentarioActivity.class);
mIntent.putExtra("projeto",viewHolder.projeto.getObjectId());
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MyApp.getInstance().startActivity(mIntent);
}
});
}
private void registraVoto(final View v, ParseObject projeto, final String tipoVoto, final ViewHolder viewHolder2) {
//verificar se esta logado
if(ParseUser.getCurrentUser() == null){
Snackbar.make(v, "Para votar é necessário estar logado", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
return;
}
Drawable apoio = ContextCompat.getDrawable(MyApp.getInstance().getApplicationContext(), R.mipmap.ic_action_like_gray);
Drawable napoio = ContextCompat.getDrawable(MyApp.getInstance().getApplicationContext(), R.mipmap.ic_action_unlike_gray);
final Drawable napoioVermelho = ContextCompat.getDrawable(MyApp.getInstance().getApplicationContext(), R.mipmap.ic_action_unlike_red);
final Drawable apoioVerde = ContextCompat.getDrawable(MyApp.getInstance().getApplicationContext(), R.mipmap.ic_action_like_green);
//verificar se ja votou nesse projeto
boolean votado;
if(viewHolder2.voto.equals("sem_voto")){
votado = false;
}else{
votado=true;
}
if(votado){
if(null!= viewHolder2.projetoVotado){
viewHolder2.projetoVotado.unpinInBackground();
viewHolder2.projetoVotado.deleteInBackground();
}
}
ParseObject voto = new ParseObject("Voto");
voto.put("projeto", projeto);
voto.put("user", ParseUser.getCurrentUser());
voto.put("voto", tipoVoto);
Button btnVoto = (Button) v;
if(tipoVoto.equals("s")){
if(votado){
viewHolder2.numNaoApoio.setText(String.valueOf(Integer.valueOf(viewHolder2.numNaoApoio.getText().toString()) - 1));
projeto.increment("nao_apoio", -1);
}
viewHolder2.numApoio.setText(String.valueOf(Integer.valueOf(viewHolder2.numApoio.getText().toString()) + 1));
projeto.increment("apoio");
btnVoto.setBackground(apoioVerde);
viewHolder2.btnDiscordo.setBackground(napoio);
viewHolder2.voto = "apoiado";
viewHolder2.btnConcordo.setEnabled(false);
viewHolder2.btnDiscordo.setEnabled(true);
}else{
if(votado){
viewHolder2.numApoio.setText(String.valueOf(Integer.valueOf(viewHolder2.numApoio.getText().toString()) - 1));
projeto.increment("apoio", -1);
}
projeto.increment("nao_apoio");
viewHolder2.numNaoApoio.setText(String.valueOf(Integer.valueOf(viewHolder2.numNaoApoio.getText().toString()) + 1));
btnVoto.setBackground(napoioVermelho);
viewHolder2.btnConcordo.setBackground(apoio);
viewHolder2.voto = "nao_apoiado";
viewHolder2.btnDiscordo.setEnabled(false);
viewHolder2.btnConcordo.setEnabled(true);
}
projeto.saveInBackground();
try {
voto.pin();
voto.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
Snackbar.make(v, "Voto registrado", Snackbar.LENGTH_SHORT)
.setAction("Action", null).show();
}
});
} catch (ParseException e) {
e.printStackTrace();
}
}
public void setRecyclerViewOnClickListenerHack(RecyclerViewOnClickListenerHack r){
mRecyclerViewOnClickListenerHack = r;
}
@Override
public int getItemCount() {
return projetos.size();
}
public void setItems(List<ParseObject> projetos) {
this.projetos = projetos;
notifyDataSetChanged();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
// each data item is just a string in this case
public ParseObject projetoVotado;
public TextView classificacao;
public TextView data;
public TextView autor;
public TextView descricao;
public TextView numApoio;
public TextView numNaoApoio;
public TextView numero;
public Button btnConcordo;
public Button btnDiscordo;
public Button btnComentar;
public String voto;
public ParseObject projeto;
public ViewHolder(View v) {
super(v);
classificacao = (TextView) v.findViewById(R.id.classificacao);
data = (TextView) v.findViewById(R.id.data);
autor = (TextView) v.findViewById(R.id.autor);
numApoio = (TextView) v.findViewById(R.id.txtNumApoio);
numNaoApoio = (TextView) v.findViewById(R.id.txtNumNaoApoio);
descricao = (TextView) v.findViewById(R.id.descricao);
btnConcordo = (Button) v.findViewById(R.id.btnConcordo);
btnDiscordo = (Button) v.findViewById(R.id.btnDiscordo);
btnComentar = (Button) v.findViewById(R.id.btnComentar);
numero = (TextView) v.findViewById(R.id.numero);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(mRecyclerViewOnClickListenerHack != null){
mRecyclerViewOnClickListenerHack.onClickListener(v, getPosition());
}
}
}
}