package com.rjconsultores.ventaboletos.web.gui.controladores.job;

import java.util.Calendar;
import java.util.Date;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;

import com.rjconsultores.ventaboletos.constantes.Constantes;
import com.rjconsultores.ventaboletos.entidad.Constante;
import com.rjconsultores.ventaboletos.service.CalculoComissaoService;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.service.CtrlFechamentoCaixaService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

public class GeneracionRetencaoDiariaComissaoJob implements Job {
	
	private static Logger log = LogManager.getLogger(GeneracionRetencaoDiariaComissaoJob.class);
	
	

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		CalculoComissaoService calculoComissaoService;
		CtrlFechamentoCaixaService ctrlFechamentoCaixaService;
		ConstanteService constanteService;
		
		ApplicationContext appContext = AppContext.getApplicationContext();
		calculoComissaoService = (CalculoComissaoService) appContext.getBean("calculoComissaoService");
		ctrlFechamentoCaixaService = (CtrlFechamentoCaixaService) appContext.getBean("ctrlFechamentoCaixaService");
		constanteService = (ConstanteService) appContext.getBean("constanteService");
		
		Constante reterComissao = constanteService.buscarPorNomeConstante(Constantes.RETER_COMISSAO_ADM_FECHAMENTO_CAIXA);
		if(reterComissao == null || !"1".equals(reterComissao.getValorconstante()) ) {
			log.info("Sistema nao configurado para reter a comissao diariamente apos o fechamento do caixa");
			return;
		}
		
		Calendar cDataRetencao = Calendar.getInstance();
		cDataRetencao.add(Calendar.DAY_OF_MONTH, -1);
		Date feccorte = cDataRetencao.getTime();
		
		log.info("Verificando fechamento dos caixas, data: " + DateUtil.getStringDate(feccorte, "dd/MM/yyyy"));
		if(!ctrlFechamentoCaixaService.autorizarExecutarRotinaRetencao(feccorte)) {
			log.info("Fechamento dos caixas n�o disponiveis para retencao da comissao");
			return;
		}
		log.info("fechamento dos caixas concluido, executar rotina de retencao da comissao");
		
		log.info("Inicio Job retencao diaria da comissao");
		calculoComissaoService.retencaoAutomaticaComissao(feccorte);
		log.info("Fim Job retencao diaria da comissao");
	}

}
