/*******************************************************************************
 * This file is part of Educatio.
 *
 *     Educatio is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 *
 *     Educatio is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 *     You should have received a copy of the GNU General Public License
 *     along with Educatio.  If not, see <http://www.gnu.org/licenses/>.
 *     
 *     Authors:
 *           Filipe Marinho de Brito - filipe.marinho.brito@gmail.com
 *           Rodrigo de Souza Ataides - rodrigoataides@gmail.com
 *******************************************************************************/
package br.com.core.conversor; 


import java.util.ArrayList;
import java.util.List;

import br.com.core.conversor.utils.ConversorUtils;
import br.com.core.jdbc.dao.evento.FichaDeInscricaoTable;
import br.com.core.modelo.curso.Turma;
import br.com.core.modelo.evento.Evento;
import br.com.core.modelo.evento.FichaDeInscricao;
import br.com.core.modelo.evento.enumerator.StatusFichaInscricao;
import br.com.core.modelo.pessoa.Pessoa;
import br.com.core.modelo.publico.Aeroporto;
import br.com.core.modelo.publico.Arquivo;
import flexjson.JSONDeserializer;
import flexjson.JSONSerializer;

public class FichaDeInscricaoConversor {

	public static FichaDeInscricaoTable converterModeloParaTabela(FichaDeInscricao modelo){

		FichaDeInscricaoTable fichaDeInscricaoTable = new FichaDeInscricaoTable();

		fichaDeInscricaoTable.setId(modelo.getId());
		Evento evento = modelo.getEvento();
		if(evento!=null && evento.getId()!=null){
			fichaDeInscricaoTable.setEvento(evento.getId());
		}

		Turma turma = modelo.getTurma();
		if(turma!=null && turma.getId()!=null){
			fichaDeInscricaoTable.setTurma(turma.getId());
		}
		
		Pessoa pessoa = modelo.getPessoa();
		if(pessoa!=null && pessoa.getId()!=null){
			fichaDeInscricaoTable.setPessoa(pessoa.getId());
		}

		Aeroporto aeroportoEmbarque = modelo.getAeroportoEmbarque();
		if(aeroportoEmbarque!=null && aeroportoEmbarque.getId()!=null){
			fichaDeInscricaoTable.setAeroportoEmbarque(aeroportoEmbarque.getId());
		}
		Aeroporto aeroportoEvento = modelo.getAeroportoEvento();
		if(aeroportoEvento!=null && aeroportoEvento.getId()!=null){
			fichaDeInscricaoTable.setAeroportoEvento(aeroportoEvento.getId());
		}
		Aeroporto aeroportoRetorno = modelo.getAeroportoRetorno();
		if(aeroportoRetorno!=null && aeroportoRetorno.getId()!=null){
			fichaDeInscricaoTable.setAeroportoRetorno(aeroportoRetorno.getId());
		}
		
		Arquivo oficioResposta = modelo.getOficioResposta();
		if(oficioResposta!=null && oficioResposta.getId()!=null){
			fichaDeInscricaoTable.setOficioResposta(oficioResposta.getId());
		}

		fichaDeInscricaoTable.setObservacao(modelo.getObservacao());
		fichaDeInscricaoTable.setTematica(modelo.getTematica());
		fichaDeInscricaoTable.setLocal(modelo.getLocal());
		fichaDeInscricaoTable.setPeriodo(modelo.getPeriodo());
		fichaDeInscricaoTable.setNome(modelo.getNome());
		fichaDeInscricaoTable.setIdentidade(modelo.getIdentidade());
		fichaDeInscricaoTable.setCpf(modelo.getCpf());
		fichaDeInscricaoTable.setMatricula(modelo.getMatricula());
		fichaDeInscricaoTable.setSiape(modelo.getSiape());
		fichaDeInscricaoTable.setMae(modelo.getMae());
		fichaDeInscricaoTable.setDataNascimento(modelo.getDataNascimento());
		fichaDeInscricaoTable.setNaturalidade(modelo.getNaturalidade());
		fichaDeInscricaoTable.setOrgaoDeLotacao(modelo.getOrgaoDeLotacao());
		fichaDeInscricaoTable.setPosto(modelo.getPosto());
		fichaDeInscricaoTable.setEmail(modelo.getEmail());
		fichaDeInscricaoTable.setEndereco(modelo.getEndereco());
		fichaDeInscricaoTable.setBairro(modelo.getBairro());
		fichaDeInscricaoTable.setCidadeUf(modelo.getCidadeUf());
		fichaDeInscricaoTable.setCep(modelo.getCep());
		fichaDeInscricaoTable.setTelefoneContato(modelo.getTelefoneContato());
		fichaDeInscricaoTable.setTelefoneFax(modelo.getTelefoneFax());
		fichaDeInscricaoTable.setTelefoneCelular(modelo.getTelefoneCelular());
		fichaDeInscricaoTable.setValorAlimentacao(modelo.getValorAlimentacao());
		fichaDeInscricaoTable.setValorTransporte(modelo.getValorTransporte());
		fichaDeInscricaoTable.setBancoNumeroNome(modelo.getBancoNumeroNome());
		fichaDeInscricaoTable.setAgencia(modelo.getAgencia());
		fichaDeInscricaoTable.setContaCorrente(modelo.getContaCorrente());
		fichaDeInscricaoTable.setAeroportoDeEmbarque(modelo.getAeroportoDeEmbarque());
		fichaDeInscricaoTable.setAeroportoDeRetorno(modelo.getAeroportoDeRetorno());
		fichaDeInscricaoTable.setAeroportoDoEvento(modelo.getAeroportoDoEvento());
		fichaDeInscricaoTable.setOutroAeroportoEmbarque(modelo.getOutroAeroportoEmbarque());
		fichaDeInscricaoTable.setOutroAeroportoRetorno(modelo.getOutroAeroportoRetorno());
		fichaDeInscricaoTable.setNisPisPasep(modelo.getNisPisPasep());
		StatusFichaInscricao status = modelo.getStatus();
		if(status!=null ){
			fichaDeInscricaoTable.setStatus(status.name());
		}

		fichaDeInscricaoTable.setVersion(modelo.getVersion());
		return fichaDeInscricaoTable;
	}

	public static FichaDeInscricao converterTabelaParaModelo(FichaDeInscricaoTable tabela){

		FichaDeInscricao fichaDeInscricao = new FichaDeInscricao();

		Evento evento = new Evento();
		evento.setId(tabela.getEvento());
		fichaDeInscricao.setEvento(evento);

		Turma turma = new Turma();
		turma.setId(tabela.getTurma());
		fichaDeInscricao.setTurma(turma);
		
		Pessoa pessoa = new Pessoa();
		pessoa.setId(tabela.getPessoa());
		fichaDeInscricao.setPessoa(pessoa);

		Aeroporto aeroportoEmbarque = new Aeroporto();
		aeroportoEmbarque.setId(tabela.getAeroportoEmbarque());
		fichaDeInscricao.setAeroportoEmbarque(aeroportoEmbarque);
		
		Aeroporto aeroportoEvento = new Aeroporto();
		aeroportoEvento.setId(tabela.getAeroportoEvento());
		fichaDeInscricao.setAeroportoEvento(aeroportoEvento);

		Aeroporto aeroportoRetorno = new Aeroporto();
		aeroportoRetorno.setId(tabela.getAeroportoRetorno());
		fichaDeInscricao.setAeroportoRetorno(aeroportoRetorno);

		Arquivo oficioResposta = new Arquivo();
		oficioResposta.setId(tabela.getOficioResposta());
		fichaDeInscricao.setOficioResposta(oficioResposta);
		
		fichaDeInscricao.setId(tabela.getId());
		fichaDeInscricao.setVersion(tabela.getVersion());
		fichaDeInscricao.setTematica(tabela.getTematica());
		fichaDeInscricao.setLocal(tabela.getLocal());
		fichaDeInscricao.setPeriodo(tabela.getPeriodo());
		fichaDeInscricao.setNome(tabela.getNome());
		fichaDeInscricao.setIdentidade(tabela.getIdentidade());
		fichaDeInscricao.setCpf(tabela.getCpf());
		fichaDeInscricao.setMatricula(tabela.getMatricula());
		fichaDeInscricao.setSiape(tabela.getSiape());
		fichaDeInscricao.setMae(tabela.getMae());
		fichaDeInscricao.setDataNascimento(tabela.getDataNascimento());
		fichaDeInscricao.setNaturalidade(tabela.getNaturalidade());
		fichaDeInscricao.setOrgaoDeLotacao(tabela.getOrgaoDeLotacao());
		fichaDeInscricao.setPosto(tabela.getPosto());
		fichaDeInscricao.setEmail(tabela.getEmail());
		fichaDeInscricao.setEndereco(tabela.getEndereco());
		fichaDeInscricao.setBairro(tabela.getBairro());
		fichaDeInscricao.setCidadeUf(tabela.getCidadeUf());
		fichaDeInscricao.setCep(tabela.getCep());
		fichaDeInscricao.setTelefoneContato(tabela.getTelefoneContato());
		fichaDeInscricao.setTelefoneFax(tabela.getTelefoneFax());
		fichaDeInscricao.setTelefoneCelular(tabela.getTelefoneCelular());
		fichaDeInscricao.setValorAlimentacao(tabela.getValorAlimentacao());
		fichaDeInscricao.setValorTransporte(tabela.getValorTransporte());
		fichaDeInscricao.setBancoNumeroNome(tabela.getBancoNumeroNome());
		fichaDeInscricao.setAgencia(tabela.getAgencia());
		fichaDeInscricao.setContaCorrente(tabela.getContaCorrente());
		fichaDeInscricao.setAeroportoDeEmbarque(tabela.getAeroportoDeEmbarque());
		fichaDeInscricao.setAeroportoDeRetorno(tabela.getAeroportoDeRetorno());
		fichaDeInscricao.setAeroportoDoEvento(tabela.getAeroportoDoEvento());
		fichaDeInscricao.setOutroAeroportoEmbarque(tabela.getOutroAeroportoEmbarque());
		fichaDeInscricao.setOutroAeroportoRetorno(tabela.getOutroAeroportoRetorno());
		fichaDeInscricao.setNisPisPasep(tabela.getNisPisPasep());
		fichaDeInscricao.setObservacao(tabela.getObservacao());
		if(tabela.getStatus() !=null && !tabela.getStatus().isEmpty() ){
			StatusFichaInscricao status = StatusFichaInscricao.valueOf(tabela.getStatus());
			fichaDeInscricao.setStatus(status);
		}

		return fichaDeInscricao;
	}

	public static String converterModeloParaJson(FichaDeInscricao fichaDeInscricao){

		JSONSerializer serializer = ConversorUtils.getJsonSerializer();
		String json = serializer.serialize(fichaDeInscricao);
		return json;

	}
	
	

	@SuppressWarnings("rawtypes")
	public static FichaDeInscricao converterJsonParaModelo(String json){

		JSONDeserializer deserializer = ConversorUtils.getJsonDeserializer();
		Object objeto = deserializer.use(null, FichaDeInscricao.class).deserialize(json);
		FichaDeInscricao fichaDeInscricao = (FichaDeInscricao) objeto;
		return fichaDeInscricao;

	}

	public static List<FichaDeInscricao> converterJsonParaList(String json){
		List<FichaDeInscricao> lista = new JSONDeserializer<List<FichaDeInscricao>>().use(null, ArrayList.class).use("values", FichaDeInscricao.class).deserialize(json);
		return lista;
	}

}
