package com.fp.armas.task;

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

import javax.persistence.EntityManager;

import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.parmas.param.TarmCentroControl;
import com.fp.persistence.parmas.soli.TarmDecomisoArma;
import com.fp.persistence.parmas.soli.TarmDecomisoArmaTransaccion;
import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail;
import com.fp.persistence.pgeneral.gene.TgeneCatalogDetailKey;
import com.fp.simple.action.TaskAction;

/**
 * Clase que se encarga de fijar el valor de deposito para la solicitud
 * @author Christian Pazmino
 * @version 2.1
 */
public class AplicarSancion extends TaskAction {

    /*
     * (non-Javadoc) 
     * @see com.fp.simple.action.TaskAction#assignOwner(com.fp.dto.Request)
     */
    @SuppressWarnings("unchecked")
    @Override
    public void assignOwner(Object pParam) throws Exception {
    	System.out.println("Rutina que determina si es un CENTRO DE CONTROL y hay al menos un arma en estado RECLAMADO");
    	HashMap<String, Object> m = (HashMap<String, Object>) pParam;
	    Map<String, Object> mrequest = (Map<String, Object>) m.get("request");
	    if (mrequest.get("numerotransaccion") == null) {
	        return;
	    }	
	    // DETERMINA SI SE DEBE O NO APLICAR LA SANCION
	    Boolean aplicarSancionBLN = Boolean.FALSE;	   
	    EntityManager em = PersistenceHelper.getEntityManager();
	    TarmDecomisoArmaTransaccion decomisoArmaTransaccionObj = TarmDecomisoArmaTransaccion.find(PersistenceHelper.getEntityManager(), Long.parseLong(mrequest.get("numerotransaccion").toString()));
	    if(decomisoArmaTransaccionObj!=null){
	    	TarmCentroControl centroControlObj = TarmCentroControl.find(em, decomisoArmaTransaccionObj.getCcentrocontrol());
	    	if(centroControlObj!=null){	    		
	    		TgeneCatalogDetailKey pk = new TgeneCatalogDetailKey(centroControlObj.getNombreinstitucion(), centroControlObj.getNombreinstitucioncodigo()); 
	    		TgeneCatalogDetail unidadCD = TgeneCatalogDetail.find(em, pk);	    		
	    		// SI ES UN DEPARTAMENTO DE CONTROL DE ARMAS, Y ES UN CENTRO DE CONTROL DE ARMAS
	    		if(centroControlObj.getInstitucion().equals("1")&& unidadCD.getDescription().contains("CENTRO CONTROL DE ARMAS")){
	    			Long numeroTransacion=Long.parseLong(mrequest.get("numerotransaccion").toString());
	    			//lista de las armas decomisadas por el codigo de recepcion
	    			List<TarmDecomisoArma> lArmasRecibidas= em.createQuery("select o from TarmDecomisoArma o where o.cdecarmtranrecepcion=:cdecarmtranrecepcion")
	    		        										.setParameter("cdecarmtranrecepcion", numeroTransacion).getResultList();
	    			
	    			for(TarmDecomisoArma decomisoArma:lArmasRecibidas){
	    	        	if("RECL".equals(decomisoArma.getEstado())){
	    	        		aplicarSancionBLN = Boolean.TRUE;
	    	        		break;
	    	        	}
	    	        }
	    		}
	    	}
	    }        
    	if(aplicarSancionBLN){    		
    		m.put("BPMStatus","A");    					
    	}    
        else{
        	m.put("BPMStatus","D");
        }
    	
    }

}
