package com.rjconsultores.ventaboletos.rest.service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;

import com.rjconsultores.routing.ReadOnlyConnection;
import com.rjconsultores.ventaboletos.dao.EmpresaDAO;
import com.rjconsultores.ventaboletos.dao.OperadorEmbarcadaDAO;
import com.rjconsultores.ventaboletos.dao.OperadorEmbarcadaLinhaDAO;
import com.rjconsultores.ventaboletos.dao.OperadorEmbarcadaServicoDAO;
import com.rjconsultores.ventaboletos.entidad.OperadorEmbarcada;
import com.rjconsultores.ventaboletos.entidad.PuntoVentaVO;
import com.rjconsultores.ventaboletos.rest.bean.ParamsSincronizarOperador;
import com.rjconsultores.ventaboletos.vo.corrida.CorridaVO;
import com.rjconsultores.ventaboletos.vo.embarcada.OperadorEmbarcadaVO;
import com.rjconsultores.ventaboletos.vo.ruta.RutaVO;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

@Service("consultarOperadorService")
public class ConsultarOperadorService {
	private static Logger log = LogManager.getLogger(ConsultarOperadorService.class);
			
	@ReadOnlyConnection
	public OperadorEmbarcadaVO buscarDadosOperador(ParamsSincronizarOperador params) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmm");
		
		Date dtIni = null;
		Date dtFim = null;
		
		try {
			dtIni = sdf.parse(params.getDataInicial());
			dtFim = sdf.parse(params.getDataFinal());
		} catch (ParseException e) {
			log.error(e.getMessage(), e);
		}
		
		EmpresaDAO empresaDAO = (EmpresaDAO)AppContext.getApplicationContext().getBean("empresaDAO");		
		OperadorEmbarcadaDAO operadorEmbarcadaDAO = (OperadorEmbarcadaDAO)AppContext.getApplicationContext().getBean("operadorEmbarcadaDAO");
		OperadorEmbarcadaLinhaDAO operadorEmbarcadaLinhaDAO = (OperadorEmbarcadaLinhaDAO)AppContext.getApplicationContext().getBean("operadorEmbarcadaLinhaDAO");
		OperadorEmbarcadaServicoDAO operadorEmbarcadaServicoDAO = (OperadorEmbarcadaServicoDAO)AppContext.getApplicationContext().getBean("operadorEmbarcadaServicoDAO");
		OperadorEmbarcada operadorEmbarcada = operadorEmbarcadaDAO.buscarOperadorEmbarcadaPorUsuario(params.getOperador());
		
		PuntoVentaVO puntoVentaVO = operadorEmbarcadaDAO.getPuntoVentaVO(params.getOperador());

		List<RutaVO> lsRutaVO = operadorEmbarcadaLinhaDAO.getListaRutaVO(params.getOperador());
		
		List<CorridaVO> lsCorridaVO = operadorEmbarcadaServicoDAO.getListaCorridaProxyVO(params.getOperador(), empresaDAO.obtenerID(params.getEmpresa()), dtIni, dtFim);
		
		OperadorEmbarcadaVO vo = new OperadorEmbarcadaVO();
		vo.setIdOperador(operadorEmbarcada.getUsuarioId());
		vo.setOperador(operadorEmbarcada.getUsername());
		vo.setDescOperador(operadorEmbarcada.getName());
		
		if (puntoVentaVO != null) {
			vo.setIdAgencia(puntoVentaVO.getPuntoventaId());
			vo.setDescAgencia(puntoVentaVO.nombpuntoventa);
		}
		
		vo.setLsRutas(lsRutaVO);
		vo.setLsCorridas(lsCorridaVO);

		return vo;
	}
}
