package com.rjconsultores.ventaboletos.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.rjconsultores.ventaboletos.dao.CajaDAO;
import com.rjconsultores.ventaboletos.dao.CorridaDAO;
import com.rjconsultores.ventaboletos.dao.EsquemaCorridaDAO;
import com.rjconsultores.ventaboletos.dao.IntegracaoTotvsDAO;
import com.rjconsultores.ventaboletos.dao.MarcaDAO;
import com.rjconsultores.ventaboletos.dao.PuntoVentaDAO;
import com.rjconsultores.ventaboletos.entidad.Corrida;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.IntegracaoTotvs;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.IntegracaoTotvsService;

@Service("integracaoTotvsService")
public class IntegracaoTotvsServiceImpl implements IntegracaoTotvsService {

	private static final String BILHETE = "BILHETE";

	@Autowired
	CajaDAO cajaDao;

	@Autowired
	PuntoVentaDAO puntoVentaDao;

	@Autowired
	MarcaDAO marcaDao;

	@Autowired
	CorridaDAO corridaDao;

	@Autowired
	EsquemaCorridaDAO esquemaCorridaDao;

	@Autowired
	IntegracaoTotvsDAO integracaoTotvsDAO;

	@Override
	public Integer atualizaStstausBilhetesIntegrar(Empresa empresa, Date dataInicial, Date dataFinal, PuntoVenta puntoVenta) throws BusinessException {
		Marca marca = null;
		if (empresa != null) {
			marca = marcaDao.buscarMarcaPorEmpresa(empresa);
		}
		return cajaDao.atualizaCajasIntegracaoTotvs(marca, dataInicial, dataFinal, puntoVenta);
	}

	@Override
	public List<PuntoVenta> buscaPuntoVentaEmpresa(Empresa empresa) {
		return puntoVentaDao.buscaPuntoVentaEmpresa(empresa);

	}

	@Override
	@Transactional
	public Integer solicitaReIntegracaoBilhete(Empresa empresa, Date dataInicial, Date dataFinal, PuntoVenta puntoVenta, Usuario usuario) throws BusinessException {
		Integer retorno = atualizaStstausBilhetesIntegrar(empresa, dataInicial, dataFinal, puntoVenta);
		if (retorno.intValue() > 0) {
			IntegracaoTotvs integracaoTotvs = new IntegracaoTotvs();
			integracaoTotvs.setDescIntegracao(BILHETE);
			integracaoTotvs.setFecInicio(dataInicial);
			integracaoTotvs.setFecFin(dataFinal);
			integracaoTotvs.setFecmodif(new Date());
			integracaoTotvs.setPuntoVentaId(puntoVenta.getPuntoventaId());
			integracaoTotvs.setEmpresaId(empresa.getEmpresaId());
			integracaoTotvs.setUsuarioId(usuario.getUsuarioId());
			integracaoTotvs.setActivo(Boolean.TRUE);
			integracaoTotvs.setQtdadeResgistrosAtualizados(retorno);
			integracaoTotvsDAO.suscribir(integracaoTotvs);
		}
		return retorno;
	}

	@Override
	public Integer atualizaStstausServicosIntegrar(Empresa empresa, Integer numServico) throws BusinessException {
		Marca marca = null;
		if (empresa != null) {
			marca = marcaDao.buscarMarcaPorEmpresa(empresa);
		}
		return esquemaCorridaDao.atualizaServicoIntegracaoTotvs(marca, numServico);
	}

	@Override
	public Integer atualizaStstausCorridasIntegrar(Empresa empresa, Integer numCorrida, Date dataInicial, Date dataFinal) throws BusinessException {
		Marca marca = null;
		if (empresa != null) {
			marca = marcaDao.buscarMarcaPorEmpresa(empresa);
		}
		return corridaDao.atualizaCorridasIntegracaoTotvs(marca, dataInicial, dataFinal, numCorrida);
	}

	@Override
	public void borrarByCorrida(Corrida corrida) {
		integracaoTotvsDAO.borrarByCorrida(corrida);
		
	}
}
