/**
 * 
 */
package com.ejie.ad74a.process;

import java.util.List;
import java.util.UUID;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ad74a.exception.BatchProcessException;
import com.ejie.ad74a.model.Solicitante;
import com.ejie.ad74a.service.CopagoBeneficiarioService;
import com.ejie.ad74a.service.LiquidacionService;

/**
 * Proceso para la generacion de liquidaciones pendientes de pago
 * 
 * @author BICUGUAL
 *
 */

@Component(value = "liquidacionesPendientes")
public class CopagoBeneficiariosLiqPndtsProcess implements IProcess {

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

	@Autowired
	private CopagoBeneficiarioService copBenService;

	@Autowired
	private LiquidacionService liqService;

	/**
	 * Metodo de ejecucion del proceso.
	 * 
	 * @param arg[0] : Codigo de provincia
	 * 
	 */
	@Override
	@Transactional(rollbackFor = Throwable.class)
	public void execute(String... args) throws BatchProcessException {

		try {

			String idProvincia = args[0];

			String idEjecucion = UUID.randomUUID().toString();

			// Obtener solicitantes a procesar
			List<Solicitante> lstSolicitantes = copBenService.getLstSolicitantesConLiquidacionPendiente(idProvincia);

			logger.info("Numero de solicitantes con liquidacion pendiente: {}", lstSolicitantes.size());

			if (!lstSolicitantes.isEmpty()) {
				// Generar liquidaciones
				liqService.generateLiquidacionesEspejo(lstSolicitantes, true, idEjecucion, false);
				// Volcar liquidaciones a tablas finales
				liqService.volcarLiquidacionesEspejoAFinales(idEjecucion);
				
			}

		} catch (Exception e) {
			throw new BatchProcessException(e);
		}

	}

}
