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.PacoteItemDAO;
import com.rjconsultores.ventaboletos.entidad.ItemAdicional;
import com.rjconsultores.ventaboletos.entidad.Pacote;
import com.rjconsultores.ventaboletos.entidad.PacoteItem;
import com.rjconsultores.ventaboletos.service.PacoteItemService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;

@Service("pacoteItemService")
public class PacoteItemServiceImpl implements PacoteItemService {

	@Autowired
	private PacoteItemDAO pacoteItemDAO;

	@Override
	public List<PacoteItem> obtenerTodos() {
		return pacoteItemDAO.obtenerTodos();
	}

	@Override
	public PacoteItem obtenerID(Integer id) {
		return pacoteItemDAO.obtenerID(id);
	}

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

		return pacoteItemDAO.suscribir(entidad);
	}

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

		return pacoteItemDAO.actualizacion(entidad);
	}

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

		pacoteItemDAO.actualizacion(entidad);
	}

	@Transactional(readOnly = false)
	@Override
	public PacoteItem vincularItemPacote(PacoteItem pacoteItem, Pacote pacote, ItemAdicional item) {

		if (pacoteItem == null) {
			pacoteItem = new PacoteItem();
		}

		pacoteItem.setItemAdicional(item);
		pacoteItem.setPacote(pacote);

		if (pacoteItem.getPacoteItemId() == null) {
			return suscribir(pacoteItem);
		} else {
			return actualizacion(pacoteItem);
		}
	}

	@Override
	public PacoteItem buscaPacoteItem(Pacote pacote, ItemAdicional item) {
		return pacoteItemDAO.buscaPacoteItem(pacote, item);
	}

	@Override
	public List<PacoteItem> buscaItensPacote(Pacote pacote) {
		return pacoteItemDAO.buscaItensPacote(pacote);
	}

}
