package com.fp.armas.task;

import java.sql.Date;
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.inte.TarmColadeImpresion;
import com.fp.persistence.parmas.param.TarmTramite;
import com.fp.persistence.parmas.soli.TarmArmas;
import com.fp.persistence.parmas.soli.TarmDocumentoHabilitante;
import com.fp.persistence.parmas.soli.TarmSolicitudTramite;
import com.fp.persistence.parmas.soli.TarmSolicitudTramiteKey;
import com.fp.sessionbeans.helper.Sequence;
import com.fp.simple.action.TaskAction;

/**
 * Clase que se encarga de fijar el codigo del tipo de archivo
 * 
 * @version 2.1
 */
public class FechaCaducidadEstadoArma 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 {   	
        HashMap<String, Object> m = (HashMap<String, Object>) pParam;
        Map<String, Object> mrequest = (Map<String, Object>) m.get("request");
        System.out.println("SOLICITUD : "+mrequest.get("csolicitud"));
        System.out.println("NUMERO DE TRANSACCION: "+mrequest.get("numerotransaccion"));
        if (mrequest.get("csolicitud") == null || mrequest.get("numerotransaccion") == null) {
            return;
        }
        EntityManager em = PersistenceHelper.getEntityManager();
        TarmSolicitudTramiteKey codigoSolicitudKey = new TarmSolicitudTramiteKey();
        codigoSolicitudKey.setCsolicitud(mrequest.get("csolicitud").toString());
        codigoSolicitudKey.setCtramite(Long.valueOf(mrequest.get("numerotransaccion").toString()));
        TarmSolicitudTramite solicitudTramite=TarmSolicitudTramite.find(em, codigoSolicitudKey);
        
        TarmTramite tramite = TarmTramite.find(em, solicitudTramite.getPk().getCtramite());
        if(!tramite.getTipoautorizacion().equals("6")){// diferente 6	TIPOAUTORIZACION	0	PERMISO
        	return;
        }
        
        System.out.println("select o from TarmDocumentoHabilitante o where o.csolicitud=:csolicitud" + mrequest.get("csolicitud").toString());
        List<TarmDocumentoHabilitante> documentoHab= em.createQuery("select o from TarmDocumentoHabilitante o where o.csolicitud=:csolicitud",TarmDocumentoHabilitante.class)
        									   .setParameter("csolicitud", mrequest.get("csolicitud").toString()).
        									   getResultList();
        System.out.println("............................"+documentoHab.size());
        
        List<TarmArmas> tarmArmas = em.
				createQuery("select o from TarmArmas o where o.pk in (select p.pk.carma from TarmSolicitudArmas p where p.pk.csolicitud=:csolicitud)",TarmArmas.class)
				.setParameter("csolicitud",mrequest.get("csolicitud").toString())
				.getResultList();
        System.out.println("............................"+tarmArmas.size());
        
        for (TarmDocumentoHabilitante itemDocHab : documentoHab) {
        	StringBuilder sqlColaImpresion= new StringBuilder("select c from TarmColadeImpresion c where c.cdocumento ="+itemDocHab.getPk());
        	List<TarmColadeImpresion>listaColaImpresion= em.createQuery(sqlColaImpresion.toString(),TarmColadeImpresion.class).getResultList();
        	if(listaColaImpresion!=null && listaColaImpresion.size()>0){
        		for (TarmColadeImpresion itemColaImp : listaColaImpresion) {
            		itemColaImp.setEstadoimpresion("PIMPR");
            		itemColaImp.setEstadoimpresioncode("ESTADOIMPRESION");
            		em.merge(itemColaImp);
            		em.flush();
    			}
        	}
		}
        
        for(TarmArmas arma:tarmArmas){
        	arma.setPk(this.getCodigoArma());
        	arma.setFechacaducidad(documentoHab.get(0).getFechaexpiracion());
			arma.setFecharegistro(new Date(System.currentTimeMillis()));
			em.clear();
			em.persist(arma);
			em.flush();
        }
    }

    private String getCodigoArma() throws Exception{
		Sequence sequence = new Sequence();
		String carma = sequence.getNextValue("CARMA").toString();
		return carma;
	}
}
