package com.fp.armas.rules.query.webservices;

import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Query;

import org.joda.time.DateTime;

import com.fp.armas.rules.query.webservices.util.ColaImpresionUtil;
import com.fp.common.logger.APPLogger;
import com.fp.dto.query.QueryRequest;
import com.fp.dto.rules.QueryRule;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.parmas.dto.ws.ColaImpresionDto;
import com.fp.persistence.parmas.inte.TarmColadeImpresion;

/**
 * Consulta los datos de impresi&oacute;n del proceso
 *
 * @author dcruz
 *
 */
public class ConsultaImpresionProceso extends QueryRule {

    private static final long serialVersionUID = -7675701723545274414L;
    public static final String QUERY_COLA_SOLICITUD = "SELECT cdocumento, estadoimpresion, estadoimpresioncode, cimpresion, fechaimpresion, "
            + "fecharegistro, codigotarjeta FROM TarmColadeImpresion o WHERE o.estadoimpresion='PIMPR' and o.cdocumento "
            + "IN ((SELECT i.cdocumento FROM TarmDocumentoHabilitante i WHERE i.csolicitud IN (SELECT c.CSOLICITUD FROM TarmSolicitud c "
            + "WHERE c.estado IN ('APB','FIN') and c.numerosolicitud=:numerosolicitud)) UNION (SELECT SD.cdocumento FROM tarmsolicituddocumento SD "
            + "WHERE sd.csolicitud IN (SELECT c.CSOLICITUD FROM TarmSolicitud c WHERE c.estado IN ('APB','FIN') and c.numerosolicitud=:numerosolicitud)))";

    @SuppressWarnings("unchecked")
    @Override
    public QueryRequest process(QueryRequest pRequest) throws Exception {
        // TODO Auto-generated method stub
        List<ColaImpresionDto> lcolaImpresion = null;
        try {

            String codigosolicitud = (String) pRequest.get("CODIGOSOLICITUD");
            System.out.println("codigosolicitud.." + codigosolicitud);
            System.out.println(QUERY_COLA_SOLICITUD);
            Query query = PersistenceHelper.getEntityManager().createNativeQuery(QUERY_COLA_SOLICITUD);
            query.setParameter("numerosolicitud", codigosolicitud);

            List<TarmColadeImpresion> ltarmColadeImpresions = new ArrayList<>();
            List<Object[]> ltarmColadeImpresionsTMP = query.getResultList();

            for (Object[] tmp : ltarmColadeImpresionsTMP) {
                TarmColadeImpresion colaImpresionObj = new TarmColadeImpresion();
                colaImpresionObj.setCdocumento(((BigDecimal) tmp[0]).longValue());
                colaImpresionObj.setEstadoimpresion(tmp[1].toString());
                colaImpresionObj.setEstadoimpresioncode(tmp[2].toString());
                colaImpresionObj.setPk(tmp[3].toString());
                colaImpresionObj.setFechaimpresion(tmp[4] == null ? null : (Timestamp) tmp[4]);
                colaImpresionObj.setFecharegistro(tmp[5] == null ? null : (Date) tmp[5]);
                if (tmp[6] != null) {
                    colaImpresionObj.setCodigotarjeta(tmp[6].toString());
                }
                ltarmColadeImpresions.add(colaImpresionObj);
            }
            lcolaImpresion = ColaImpresionUtil.getInstancia().completaColaImpresion(ltarmColadeImpresions);
            pRequest.getResponse().put("COLAIMPRESION", lcolaImpresion);
//            pRequest.getResponse().put("COLAIMPRESION", lcolaImpresion);
        } catch (Throwable e) {
            APPLogger.getLogger().error(e.getMessage(), e);
        }
        return pRequest;
    }

}
