/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.service.impl;

import java.math.BigDecimal;
import java.util.Calendar;
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.TramoDAO;
import com.rjconsultores.ventaboletos.dao.TramoServicioDAO;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.entidad.TramoServicio;
import com.rjconsultores.ventaboletos.entidad.Via;
import com.rjconsultores.ventaboletos.service.TramoService;
import com.rjconsultores.ventaboletos.service.TramoServicioService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;

/**
 * 
 * @author Rafius
 */
@Service("tramoServicioService")
public class TramoServicioServiceImpl implements TramoServicioService {

	@Autowired
	private TramoServicioDAO tramoServicioDAO;
	@Autowired
	private TramoService tramoService;
	@Autowired
	private TramoDAO tramoDAO;

	public List<TramoServicio> obtenerTodos() {
		return tramoServicioDAO.obtenerTodos();
	}

	public TramoServicio obtenerID(Integer id) {
		return tramoServicioDAO.obtenerID(id);
	}

	@Transactional
	public TramoServicio suscribir(TramoServicio entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.TRUE);

		return tramoServicioDAO.suscribir(entidad);
	}

	@Transactional
	public TramoServicio actualizacion(TramoServicio entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.TRUE);

		return tramoServicioDAO.actualizacion(entidad);
	}

	@Transactional
	public void borrar(TramoServicio entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.FALSE);

		tramoServicioDAO.actualizacion(entidad);
	}

	public List<TramoServicio> buscarPorTramo(Tramo tramo) {
		return tramoServicioDAO.buscarPorTramo(tramo);
	}

	public List<TramoServicio> buscarPorTramoServico(Tramo tramo, ClaseServicio clase) {
		return tramoServicioDAO.buscarPorTramo(tramo, clase);
	}

	@Override
	public TramoServicio buscar(Parada origen, Parada destino, Via via, ClaseServicio clase) {
		return tramoServicioDAO.buscar(origen, destino, via, clase);
	}

	@Override
	@Transactional
	public boolean generarTramoTiempo(Parada origen, Parada destino, Via via, BigDecimal kmsReal,Date tiempoRecorrido, ClaseServicio claseServicio) {

		TramoServicio tramoServicio = tramoServicioDAO.buscar(origen, destino, via, claseServicio);

		Tramo tramo = null;
		if (tramoServicio == null) {
			tramo = tramoService.buscar(origen, destino, via);
			if (tramo == null) {
				tramo = new Tramo();
				tramo.setDesctramo(tramoService.gerarDescripcionTramo(origen, destino, via));
				tramo.setOrigem(origen);
				tramo.setDestino(destino);
				tramo.setKmReal(kmsReal);
				tramo.setVia(via);
				tramo.setActivo(Boolean.TRUE);
				tramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				tramo.setFecmodif(new java.util.Date());

				tramo = tramoDAO.suscribir(tramo);
			}
			tramoServicio = new TramoServicio();
			tramoServicio.setClaseServicio(claseServicio);
			tramoServicio.setTramo(tramo);
			tramoServicio.setTiemporecorrido(tiempoRecorrido);

			tramoServicio = this.suscribir(tramoServicio);

			return true;
		}

		return false;
	}

	@Override
	public boolean existenTiemposTramosEsquema(Integer esquemaCorridaId) {
		return tramoServicioDAO.existenTiemposTramosEsquema(esquemaCorridaId);
	}
}
