package com.rjconsultores.ventaboletos.rest.service;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.rjconsultores.ventaboletos.dao.DispositivoEmbarcadaDAO;
import com.rjconsultores.ventaboletos.entidad.DispositivoEmbarcada;
import com.rjconsultores.ventaboletos.rest.bean.ParamsSincronizarDispositivo;
import com.rjconsultores.ventaboletos.rest.bean.ParamsUltimaSincDispositivo;
import com.rjconsultores.ventaboletos.rest.service.exception.ServiceEmbarcadaException;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.vo.embarcada.DispositivoEmbarcadaVO;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

@Service("ultimaSincronizacaoService")
public class UltimaSincronizacaoService {
	
	private static Logger log = LogManager.getLogger(UltimaSincronizacaoService.class);
	
	@Autowired
	private SincronizarService sincronizarService;

	@Transactional
	public DispositivoEmbarcadaVO registrarUltimaSincronizaco(ParamsUltimaSincDispositivo params) throws ServiceEmbarcadaException {
		try {
			DispositivoEmbarcadaDAO dispositivoEmbarcadaDAO = (DispositivoEmbarcadaDAO)AppContext.getApplicationContext().getBean("dispositivoEmbarcadaDAO");
			
			DispositivoEmbarcada dispositivo = dispositivoEmbarcadaDAO.buscarImei(params.getImei());
	
			if (dispositivo == null){
				DispositivoEmbarcadaVO dispositivoVo = new DispositivoEmbarcadaVO();
				dispositivoVo.setMsg("Dispositivo não encontrado");
				return dispositivoVo;
			}
			
			dispositivo.setVersaoUltimaSinc(params.getVersao());
			dispositivo.setDataUltimaSinc( DateUtil.getDateFromString( params.getDataUltimaSinc(), DateUtil.formatJson ));
			
			dispositivoEmbarcadaDAO.actualizacion(dispositivo);
			log.info( "Dispositivo Sincronizado: "+dispositivo.toString() );
		
			ParamsSincronizarDispositivo parametro = new ParamsSincronizarDispositivo();
			parametro.setImei(params.getImei());
			
			DispositivoEmbarcadaVO vo = sincronizarService.getDispositivoEmbarcada(parametro);
		
			return vo;
		}catch( Exception e) {
			throw new ServiceEmbarcadaException( e.getMessage() );
		}
	}
	
}
