package com.ejie.ad74a.jms.service;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ad74a.dao.DocumentosTareaDao;
import com.ejie.ad74a.dao.TareasTramiteDao;
import com.ejie.ad74a.exceptions.ManagerErrors;
import com.ejie.ad74a.model.DocumentosTarea;
import com.ejie.ad74a.model.TareasTramite;
import com.ejie.ad74a.tareas.service.TareaAportarDocumentacionService;
import com.ejie.ad74a.util.constantes.EstadoDocuEnum;
import com.ejie.ad74a.util.constantes.TareasEnum;
import com.ejie.ad74a.ws.client.dokusi.service.DokusiService;
import com.ejie.ad74a.ws.client.platea.model.notification.NotificationBody;

/**
 * EntidadesServiceImpl generated by UDA, 21-jul-2021 10:42:45.
 * 
 * @author UDA
 */

@Service(value = "locatorJMSService")
public class LocatorJMSServiceImpl implements LocatorJMSService {

	private static final Logger logger = LoggerFactory.getLogger(LocatorJMSServiceImpl.class);

	private static final int TRANSACTION_TIMEOUT = 60;

	public static final String EVENTO_PROPERTY_REQUEST_ID = "requestID";

	@Autowired
	private DocumentosTareaDao documentosTareaDao;

	@Autowired
	private DokusiService dokusiService;

	@Autowired
	private TareasTramiteDao tareasTramiteDao;

	@Autowired
	private TareaAportarDocumentacionService tareaAportarDocumentacionService;

	/**
	 * Gestión del evento de Tareas - R02_TASK
	 */
	@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class, timeout = LocatorJMSServiceImpl.TRANSACTION_TIMEOUT)
	public void tratamientoLocator(NotificationBody notificationBody, Map<String, Object> mapaMensaje)
			throws Throwable {
		LocatorJMSServiceImpl.logger.info("LocatorJMSServiceImpl.tratamientoLocator - Inicio");

		// recuperamos el idLocalizador
		String idLocalizador = (String) mapaMensaje.get(EVENTO_PROPERTY_REQUEST_ID);
		DocumentosTarea documento = new DocumentosTarea();
		documento.setLocalizador18(idLocalizador);
		List<DocumentosTarea> listaDoc = documentosTareaDao.findAll(documento, null);
		if (null != listaDoc && !listaDoc.isEmpty()) {
			documento = listaDoc.get(0);
		} else {
			ManagerErrors.manageError("El localizador no pertenece a ningun documento: " + idLocalizador);
		}

		documento.setEstadoDoc18(EstadoDocuEnum.CON_LOCALIZADOR.getId());
		this.documentosTareaDao.updateEstado(documento);

		this.dokusiService.firmarDocumentoPades(documento);

		TareasTramite tarea = this.tareasTramiteDao.find(new TareasTramite(documento.getIdTareaTram18()));
		String tipo = tarea.getMaestroTareas().getTipoTarea38();

		switch ((TareasEnum.getEnumByTaskId(tipo))) {
		// ** TAREA APERTURA ** //
		case RESOL_CONCESION:
		case RESOL_DESISTIMIENTO:
		case RESOL_DENEGACION:
		case RESOL_DENEGACION_SERVICIO_AUDIENCIA:
		case REQUERIMIENTO_SUBSANACION:
		case AUDIENCIA:
		case APOR_CARTA_LIQUID:
			/****/
			this.tareaAportarDocumentacionService.ejecutarTareaResol(tarea.getTaskguid11(),
					documento.getIdDocTarea18());
			break;
		default:
			ManagerErrors.manageError("LocatorJMSServiceImpl.tratamientoLocator Tarea no controlada - tipo: " + tipo);
			break;
		}

		LocatorJMSServiceImpl.logger.info("LocatorJMSServiceImpl.tratamientoLocator - Fin");
	}

}
