package br.mp.mprj.portal.portlet.gestaomensagens.util;

import br.mp.mprj.portal.portlet.gestaomensagens.search.vo.DenunciaVO;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.liferay.portal.kernel.util.StringUtil;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public class GerarListaDecisao {
	public static String Listar(String token,String url_wso2,String url_comunicacao) throws Exception{
		String lista = null;		
		
		DateFormat dateFormat = new SimpleDateFormat("ddMMyyyyHHmm");
		Date date = new Date();
		  		
		lista = FormatarLista(url_wso2, dateFormat.format(date), token, url_comunicacao);
				
		return lista;
	}
	private static String FormatarLista(String url, String data, String token, String link) throws Exception{
				
		String jsonInString = ApiUtil.getJsonResultado(url, data, token);
		String listaFormatada = "";
		String json = "";
		String decisao = "";
		Gson gson = new Gson();
		TypeToken<List<DenunciaVO>> typeToken = new TypeToken<List<DenunciaVO>>() {};		
		
		if(jsonInString.contains("{\"Entries\":{\"Entry\":[")){
		
			json = StringUtil.replace(jsonInString, new String[] {"{\"Entries\":{\"Entry\":[","}]}}"},new String[] {"[","}]"}); 
			
			List<DenunciaVO> decisoes = gson.fromJson(json,typeToken.getType());			
			
			for(DenunciaVO d: decisoes){
				if(d.getTipodecisao().equals(Constantes.VITORIA)){
					decisao = Constantes.VITORIA;
				}else{
					decisao = Constantes.NOVA;					
				}
				listaFormatada += StringUtil.replace(Constantes.TEMPLATE_LISTA_COMUNICACAO, new String[] {"[$reu$]","[$tipo$]","[$processo$]","[$assunto$]","[$url_comunicacao$]","[$data-comunicacao$]"},new String[] {d.getReu(),d.getTipodecisao(),d.getProcesso(),d.getAssunto(),link+ decisao+"/"+d.getIddecisoes(),d.getDatainclusao()}); 
		    }
    				
		}else if(jsonInString.contains("{\"Entries\":{\"Entry\":{")){
		
			json = StringUtil.replace(jsonInString, new String[] {"{\"Entries\":{\"Entry\":{","}}}"},new String[] {"[{","}]"}); 
			
			List<DenunciaVO> decisoes = gson.fromJson(json,typeToken.getType());			
			
			for(DenunciaVO d: decisoes){						
				if(d.getTipodecisao().equals(Constantes.VITORIA)){
					decisao = Constantes.VITORIA;
				}else{
					decisao = Constantes.NOVA;					
				}
				listaFormatada += StringUtil.replace(Constantes.TEMPLATE_LISTA_COMUNICACAO, new String[] {"[$reu$]","[$tipo$]","[$processo$]","[$assunto$]","[$url_comunicacao$]","[$data-comunicacao$]"},new String[] {d.getReu(),d.getTipodecisao(),d.getProcesso(),d.getAssunto(),link+ decisao+"/"+d.getIddecisoes(),d.getDatainclusao()}); 
		    }
			
		}else if(jsonInString.contains("{\"Entries\":null") || jsonInString.contains("{\"Entries\":{}")){
			
			listaFormatada = Constantes.NULO;
			
		}else{
		
			listaFormatada = Constantes.INDISPONIVEL;
		}				
		
		return listaFormatada;
	}
}
