package com.rjconsultores.ventaboletos.service.impl;

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

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.ConexionRutaLocalidadeRemovidaDAO;
import com.rjconsultores.ventaboletos.entidad.ConexionRutaLocalidadeRemovida;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.service.ConexionRutaLocalidadeRemovidaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;

/**
 *
 * @author valdevisp
 */
@Service("conexionRutaLocalidadeRemovidaService")
public class ConexionRutaLocalidadeRemovidaServiceImpl implements ConexionRutaLocalidadeRemovidaService {

	@Autowired
	private ConexionRutaLocalidadeRemovidaDAO conexionRutaLocalidadeRemovidaDAO;


	@Transactional
	public List<ConexionRutaLocalidadeRemovida> obtenerTodos() {
		return conexionRutaLocalidadeRemovidaDAO.obtenerTodos();
	}

	@Transactional
	public ConexionRutaLocalidadeRemovida obtenerID(Integer id) {
		return conexionRutaLocalidadeRemovidaDAO.obtenerID(id);
	}

	@Transactional
	public ConexionRutaLocalidadeRemovida suscribir(Integer ConexionRutaConfId, Integer paradaId) {
		ConexionRutaLocalidadeRemovida conexionRutaLocalidadeRemovida = new ConexionRutaLocalidadeRemovida(null, ConexionRutaConfId, paradaId.longValue(), Boolean.TRUE, new Date(), UsuarioLogado.getUsuarioLogado().getUsuarioId());
		return conexionRutaLocalidadeRemovidaDAO.suscribir(conexionRutaLocalidadeRemovida);
	}

	@Transactional
	public ConexionRutaLocalidadeRemovida actualizacion(ConexionRutaLocalidadeRemovida entidad) {
		return conexionRutaLocalidadeRemovidaDAO.actualizacion(entidad);
	}

	@Transactional
	public void borrar(ConexionRutaLocalidadeRemovida entidad) {
		conexionRutaLocalidadeRemovidaDAO.borrar(entidad);

	}

	@Transactional
	public void removerPorParada(Parada parada) {
		conexionRutaLocalidadeRemovidaDAO.removerPorParada(parada);
	}

	@Override
	@Transactional
	public ConexionRutaLocalidadeRemovida suscribir(ConexionRutaLocalidadeRemovida entidad) {
		return conexionRutaLocalidadeRemovidaDAO.suscribir(entidad);
	}

	@Transactional
	public ConexionRutaLocalidadeRemovida obtenerPorParadaId(Integer id) {
		return conexionRutaLocalidadeRemovidaDAO.obtenerPorParadaId(id);
	}

	/**
	 *Obtem a lista de paradas removidas pela lista de paradas
	 */
	public List<ConexionRutaLocalidadeRemovida> obtenerPorParadaList(List<Parada> paradaList) {
		List<Long> paradaIdList = new ArrayList<Long>();
		for (Parada parada : paradaList) {
			paradaIdList.add(parada.getParadaId().longValue());
		}
		return conexionRutaLocalidadeRemovidaDAO.obtenerPorParadaIdList(paradaIdList);
	}
	
	public ConexionRutaLocalidadeRemovida obtenerPorParadaIdEConexionrutaconfId(Integer conexionRutaConfId,Integer paradaId) {
		return conexionRutaLocalidadeRemovidaDAO.obtenerPorParadaIdEConexionrutaconfId(conexionRutaConfId, paradaId);
	}

	public List<ConexionRutaLocalidadeRemovida> obtenerPorConexionrutaconfIdEParadaIdList(Integer conexionRutaConfId,List<Parada> paradaList){
		List<Long> paradaIdList = new ArrayList<Long>();
		for (Parada parada : paradaList) {
			paradaIdList.add(parada.getParadaId().longValue());
		}
		return conexionRutaLocalidadeRemovidaDAO.obtenerPorConexionrutaconfIdEParadaIdList(conexionRutaConfId, paradaIdList);
	}
	
	 public void removerTodosPorConexionrutaconfId(Integer conexionRutaConfId) {
		  conexionRutaLocalidadeRemovidaDAO.removerTodosPorConexionrutaconfId(conexionRutaConfId);		 
	 }
}
