package com.rjconsultores.ventaboletos.vo.busquedapacotes.transformer;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.transform.ResultTransformer;

import com.rjconsultores.ventaboletos.enums.LocalEnderecoApanhe;
import com.rjconsultores.ventaboletos.vo.busquedapacotes.EnderecoApanheVO;

public class DatosEnderecoApanheResultTransformer implements ResultTransformer {

	private static final long serialVersionUID = 1L;

	@Override
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public List<EnderecoApanheVO> transformList(List mapList) {
		Map<Long, EnderecoApanheVO> passageiros = new HashMap<Long, EnderecoApanheVO>();
		
		for (Object objmap : mapList) {
			Map<String, Object> tupleMap = (Map<String, Object>) objmap;
			Long vendapacoteId = (Long) tupleMap.get("VENDAPACOTE_ID");
			
			if(!passageiros.containsKey(vendapacoteId)){
				EnderecoApanheVO enderecoApanhe = new EnderecoApanheVO();
				enderecoApanhe.setVendapacoteId(vendapacoteId);
				setDatosEnderecoApanhe(enderecoApanhe, tupleMap);
				passageiros.put(vendapacoteId, enderecoApanhe);				
			}
		}
				
		List<EnderecoApanheVO> enderecosApanheList = new ArrayList<EnderecoApanheVO>();
		enderecosApanheList.addAll(passageiros.values());
		
		return enderecosApanheList;
	}
	
	@Override
	public Object transformTuple(Object[] data, String[] aliases) {
		Map<String,Object> row = new HashMap<String,Object>();
		
		for(int index = 0; index < aliases.length; index++){
			row.put(aliases[index], data[index]);
		}
		
		return row;
	}

	private void setDatosEnderecoApanhe(EnderecoApanheVO enderecoApanhe, Map<String, Object> tupleMap) {
		LocalEnderecoApanhe localEnderecoApanhe = LocalEnderecoApanhe.getLocalEnderecoApanhe((Integer) tupleMap.get("LOCAL"));
		enderecoApanhe.setLocal(localEnderecoApanhe.toString());
		enderecoApanhe.setDeschotel((String) tupleMap.get("DESCHOTEL"));
		enderecoApanhe.setCep((String) tupleMap.get("CEP"));
		enderecoApanhe.setEndereco((String) tupleMap.get("ENDERECO"));
		enderecoApanhe.setNumero((String) tupleMap.get("NUMERO"));
		enderecoApanhe.setComplemento((String) tupleMap.get("COMPLEMENTO"));
		enderecoApanhe.setCidade((String) tupleMap.get("CIDADE"));
		enderecoApanhe.setBairro((String) tupleMap.get("BAIRRO"));
		enderecoApanhe.setReferencia((String) tupleMap.get("REFERENCIA"));
		
	}

}
