package com.fp.armas.rules.save.armas;

import java.sql.Date;

import javax.persistence.EntityManager;

import com.fp.dto.rules.TransactionRule;
import com.fp.dto.save.SaveRequest;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.parmas.fun.TarmRegistroArmas;
import com.fp.persistence.parmas.soli.TarmArmas;
import com.fp.persistence.pcustomer.gene.TcustPersonDetail;
import com.fp.sessionbeans.helper.Sequence;

public class CambiarUsuarioArma extends TransactionRule {

	private static final long serialVersionUID = -7465655492847129136L;

	/**
	 * Cambio el estado del arma y genero un nuevo registro para una nueva persona
	 */
	@Override
	public SaveRequest normalProcess(SaveRequest pRequest) throws Exception {
		EntityManager entityManager = PersistenceHelper.getEntityManager();
		TarmArmas arma = (TarmArmas) pRequest.get("ARMAACTUAL");
		TcustPersonDetail persona = (TcustPersonDetail) pRequest.get("NUEVAPERSONA");
		TarmRegistroArmas registroActual = TarmRegistroArmas.find(entityManager, arma.getCregistro());
		//arma antigua genera un registro a cambio de propietario
		arma.setPk(getCodigoArma());
		String estadoArmaAnterior=arma.getEstado();
		arma.setEstado("CDP");//CAMBIO DE PROPIETARIO
		arma.setEstadocodigo("ESTADOARMA");
		arma.setFecharegistro(new Date(new java.util.Date().getTime()));
		entityManager.persist(arma);
		//registro de la nueva cabecera del propietario
		TarmRegistroArmas registroArmas = new TarmRegistroArmas();
		registroArmas.setPk(getCodigoRegistro());
		registroArmas.setFcreacion(new Date(System.currentTimeMillis()));
		registroArmas.setAeropuertopuerto(registroActual.getAeropuertopuerto());
		registroArmas.setDui(registroActual.getDui());
		registroArmas.setFechasolicitud(registroActual.getFechasolicitud());
		registroArmas.setPersoncode(persona.getPk().getPersoncode());
		registroArmas.setFabricante(registroActual.getFabricante());
		registroArmas.setPaisorigen(registroActual.getPaisorigen());
		registroArmas.setTiporegistro("CDP");//CAMBIO DE PROPIETARIO
		registroArmas.setTiporegistrocodigo(registroActual.getTiporegistrocodigo());
		registroArmas.setTramite(registroActual.getTramite());
		registroArmas.setSolicitudnum(registroActual.getSolicitudnum());
		registroArmas.setTotalfob(registroActual.getTotalfob());
		entityManager.persist(registroArmas);
		//regisro de la nueva arma con el nuevo propietario
		TarmArmas armaNueva = (TarmArmas) arma.cloneMe();
		armaNueva.setPk(getCodigoArma());
		entityManager.detach(armaNueva);
		armaNueva.setEstado(estadoArmaAnterior);//se mantiene el mismo estado del arma
		armaNueva.setFecharegistro(new Date(new java.util.Date().getTime()));
		armaNueva.setCregistro(registroArmas.getPk());
		//armaNueva.setCodigoarma(armaNueva.getPk());
		entityManager.persist(armaNueva);
		 
		return pRequest;
	}

	@Override
	public SaveRequest reverseProcess(SaveRequest pRequest) throws Exception {
		return pRequest;
	}
	
	private Long getCodigoRegistro() throws Exception{
		Sequence sequence = new Sequence();
		Long cregistro = sequence.getNextValue("CREGISTRO").longValue();
		return cregistro;
	}
	
	private String getCodigoArma() throws Exception{
		Sequence sequence = new Sequence();
		String carma = sequence.getNextValue("CARMA").toString();
		return carma;
	}

}
