package com.rjconsultores.ventaboletos.service.impl;

import java.util.Calendar;
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.PacoteDAO;
import com.rjconsultores.ventaboletos.entidad.ItemAdicional;
import com.rjconsultores.ventaboletos.entidad.Pacote;
import com.rjconsultores.ventaboletos.entidad.PacoteItem;
import com.rjconsultores.ventaboletos.entidad.PacoteTarifa;
import com.rjconsultores.ventaboletos.entidad.TipoTarifaPacote;
import com.rjconsultores.ventaboletos.service.PacoteItemService;
import com.rjconsultores.ventaboletos.service.PacoteService;
import com.rjconsultores.ventaboletos.service.PacoteTarifaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;

@Service("pacoteService")
public class PacoteServiceImpl implements PacoteService {

	@Autowired
	private PacoteDAO pacoteDAO;

	@Autowired
	private PacoteTarifaService pacoteTarifaService;

	@Autowired
	private PacoteItemService pacoteItemService;

	@Override
	public List<Pacote> obtenerTodos() {
		return pacoteDAO.obtenerTodos();
	}

	@Override
	public Pacote obtenerID(Integer id) {
		return pacoteDAO.obtenerID(id);
	}

	@Transactional
	@Override
	public Pacote suscribir(Pacote entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());

		return pacoteDAO.suscribir(entidad);
	}

	@Transactional
	@Override
	public Pacote actualizacion(Pacote entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());

		return pacoteDAO.actualizacion(entidad);
	}

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

		pacoteDAO.actualizacion(entidad);
	}

	@Override
	public Boolean verificaCadastroTarifa(Pacote pacote, TipoTarifaPacote tarifa) {

		List<PacoteTarifa> pacoteTarifaLs = pacoteTarifaService.buscaTarifasPacote(pacote);
		for (PacoteTarifa pacoteTarifa : pacoteTarifaLs) {
			if (pacoteTarifa.getTipoTarifaPacote().equals(tarifa))
				return Boolean.FALSE;
		}

		return Boolean.TRUE;
	}

	@Override
	public Boolean verificaCadastroItemAdicional(Pacote pacote, ItemAdicional item) {
		List<PacoteItem> pacoteItemLs = pacoteItemService.buscaItensPacote(pacote);

		for (PacoteItem pacoteItem : pacoteItemLs) {
			if (pacoteItem.getItemAdicional().equals(item))
				return Boolean.FALSE;
		}

		return Boolean.TRUE;
	}

}
