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

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import com.fp.dto.rules.TransactionRule;
import com.fp.dto.save.SaveRequest;
import com.fp.persistence.parmas.soli.TarmBodega;
import com.fp.persistence.parmas.soli.TarmDecomisoArma;
import com.fp.persistence.parmas.soli.TarmDecomisoArmaTransaccion;
import com.fp.persistence.parmas.soli.TarmTransaccionArmaBodega;
import com.fp.sessionbeans.helper.Sequence;

/**
 * Transaccion rule para decomiso de arma
 * @author Carlos Guzman
 *
 */
public class DecomisoArmaTransaccion extends TransactionRule {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1840770563013500407L;

	@Override
	public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception {

		TarmDecomisoArmaTransaccion decomisoArmaTransaccion=(TarmDecomisoArmaTransaccion) pSaveRequest.getSaveBeanModifiedObject("DECOMISOARMATRANSACCION");
		if(decomisoArmaTransaccion==null){
			return pSaveRequest;
		}
		Calendar cal=Calendar.getInstance();
		java.sql.Date fechaRegistro=new java.sql.Date(cal.getTimeInMillis());
		Long codigoGenerado = Long.parseLong(getCodigo("CDECOMISOARMATRANSACCION"));

		decomisoArmaTransaccion.setPk(codigoGenerado);
		decomisoArmaTransaccion.setFtransaccion(fechaRegistro);
		decomisoArmaTransaccion.setNumerotransaccion( getNumeroTransaccion("ENV",codigoGenerado.toString()));
		TarmDecomisoArma decomisoArma=(TarmDecomisoArma)pSaveRequest.getSaveBeanModifiedObject("RPRTEDESTRUCCIONDEARMAS");		
		List<Object> lDecomisoArma = (List<Object>)pSaveRequest.getSaveBeanModifiedRecords("RPRTEDESTRUCCIONDEARMAS");		
		List<Object> lArmaBodega=(List<Object>)pSaveRequest.getSaveBeanModifiedRecords("TRANSACCIONARMABODEGA");		
		List<Object> lBodega=(List<Object>)pSaveRequest.getSaveBeanModifiedRecords("BODEGA");
		
		if(lDecomisoArma.isEmpty()){
			lDecomisoArma.add(decomisoArma);
		}

		for (Object object : lDecomisoArma) {
			TarmDecomisoArma c=(TarmDecomisoArma)object;
			
			if(c.getModifiedData().get("seleccion").equals(Boolean.TRUE)){
				c.setCdecomisoarmatransaccion(codigoGenerado);
			}
		}		

		for (Object object : lArmaBodega) {
			TarmTransaccionArmaBodega c=(TarmTransaccionArmaBodega)object;
			c.setPk(Long.parseLong(getCodigo("CTRANARMBODEGA")));
			c.setCdecomisoarmatransaccion(codigoGenerado);
			c.setOperacion("ENVIO");
			c.setOperacioncode("OPERACIONDECOMISO");
			c.setFecha(new java.sql.Timestamp((new Date()).getTime()));			
		}
		
		for (Object object : lBodega) {
			TarmBodega c=(TarmBodega)object;
			c.setPk(Long.parseLong(getCodigo("CBODEGA")));
		}		
	
		return pSaveRequest;
	}
	

	@Override
	public SaveRequest reverseProcess(SaveRequest arg0) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}
	
    /**
     * Metodo para obtener el numero de secuencia de la base de datos
     * @param codigoSec nombre del campo de la secuencia
     * @return la secuencia generada
     * @throws Exception
     */
    private String getCodigo(String codigoSec) throws Exception {
        Sequence sequence = new Sequence();
        Integer codigo = Integer.valueOf(sequence.getNextValue(codigoSec).toString());
        return codigo.toString();
    }
    
    /**
     * Metodo que arma el numero de la transaccion
     * @param prefijo prefijo a usarse pata el numero a generarse
     * @param secuencia numero de secuencia
     * @return el numero de documento generado
     */
    private String getNumeroTransaccion(String prefijo,String secuencia){
		return prefijo+"-"+StringUtils.leftPad(secuencia, 9, '0');
    }
		

}
