var atualizarAbcPharmaMapper = mapperFactory.createMapper("AtualizarAbcPharma");
var listaDeProdutos = message.get("listaDeProdutos");
var produtosEncontrados = [];


var identificarQuantidadeDeListaNecessaria = function(lista){
	 return Math.ceil(listaDeProdutos.size()/2000);
};


var definirMapDePesquisaPorIteracao = function(numInteracao){
	var objetoRequest = new java.util.HashMap();
	objetoRequest.putAll(message);
	
	if((identificarQuantidadeDeListaNecessaria(listaDeProdutos)-1) !== numInteracao){
		objetoRequest.put('listaDeProdutos', objetoRequest.get('listaDeProdutos').subList(numInteracao*2000, (numInteracao*2000)+1999));
	}else{
		objetoRequest.put('listaDeProdutos', objetoRequest.get('listaDeProdutos').subList(numInteracao*2000, objetoRequest.get('listaDeProdutos').size()));
	}
	
	return objetoRequest;
};




if(listaDeProdutos.size()>0){
	
	var dadosCompletos = new java.util.ArrayList();
	
	/**
	 * Quebra a lista de produtos em varias menores, a lista de produtos passados pela requisição é montado a query, a cada iteração o retorno
	 * vai sendo adicionados ao objeto dadosCompletos, motivo : limitação de parametros motados para a clausula IN, permitido apenas 2000 itens.
	 */
	for(var c = 0; c<identificarQuantidadeDeListaNecessaria(listaDeProdutos); c++){
			dadosCompletos.addAll(atualizarAbcPharmaMapper.selectList("listarJoinProdutoComCdBarra", definirMapDePesquisaPorIteracao(c)));
	}
	
	 /**
	  * Itera os dados retornados do join, caso  o produto tenha uma tupla retornada na query ele é inseido no array de produtos encontrados e 
	  * logo em seguida é removido da lista de produtos passadas pelo corpo da requisição
	  */
	 
	   	for(var i = 0; i<dadosCompletos.size(); i++){
			for(var j = 0; j<listaDeProdutos.size(); j++){
				if(dadosCompletos.get(i).get("cdBarra").equals(listaDeProdutos.get(j).get("medBarra"))){
				    
					var produto = {
					    "labNom": listaDeProdutos.get(j).get("labNom"),
					    "medPla1": listaDeProdutos.get(j).get("medPla1"),
					    "medPco1" : listaDeProdutos.get(j).get("medPco1"),
					    "cdEmp" : dadosCompletos.get(i).get("cdEmp"),
					    "cdProd" : dadosCompletos.get(i).get("cdProd"),
					    "cdBarra": dadosCompletos.get(i).get("cdBarra"),
					    "dsProd" : dadosCompletos.get(i).get("dsProd"),
					    "apresQtVd": dadosCompletos.get(i).get("apresQtVd"),
					    "apresQtCp" : dadosCompletos.get(i).get("apresQtCp")
					    };
					    
					produtosEncontrados.push(produto);
					listaDeProdutos.remove(listaDeProdutos.get(j));
					j--;
					break;
					
				}
			}
		}
}
	/*Os produtos não encontrados passado pela requisição que não são encontrados são retornados ao cliente no array de pordutos não encontrado*/
var result = {'listaDeProdutosEncontrados':produtosEncontrados, 'listaDeProdutosNaoEncontrados':listaDeProdutos };
result;