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.AliasClasseDAO;
import com.rjconsultores.ventaboletos.entidad.AliasClasse;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.AliasClasseService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;

@Service("aliasClasseService")
public class AliasClasseServiceImpl implements AliasClasseService {

	@Autowired
	private AliasClasseDAO aliasClasseDAO;

	public List<AliasClasse> obtenerTodos() {
		return aliasClasseDAO.obtenerTodos();
	}

	public AliasClasse obtenerID(Integer id) {
		return aliasClasseDAO.obtenerID(id);
	}

	@Transactional
	public AliasClasse suscribirActualizar(AliasClasse entidad) throws BusinessException {
		
		if ( (entidad.getClasse() == null) || (entidad.getAlias() == null) || (entidad.getOrgaoConcedente() == null) ){
			throw new BusinessException("MSG.camposObrigatorios");
		}
		//manter a compatibilidade com os cadastros ja existentes
		Integer empresaId = entidad.getEmpresa() != null ? entidad.getEmpresa().getEmpresaId() : null;
		Integer rutaId = entidad.getRuta() != null ? entidad.getRuta().getRutaId() : null;
		
		List<AliasClasse> lsBusca = aliasClasseDAO.buscar(entidad.getClasse().getClaseservicioId(), entidad.getAlias().getClaseservicioId(), entidad.getOrgaoConcedente().getOrgaoConcedenteId(), empresaId, rutaId);
		
		if (!lsBusca.isEmpty()){
			
			for(AliasClasse as : lsBusca){
				if(!as.equals(entidad)){
					throw new BusinessException("MSG.registroYaExiste");
				}
			}
		}
		
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.TRUE);

		if (entidad.getAliasClasseId() == null){
			return aliasClasseDAO.suscribir(entidad);
		}else{
			return aliasClasseDAO.actualizacion(entidad);
		}
	}

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

		aliasClasseDAO.actualizacion(entidad);
	}

	@Override
	public AliasClasse existe(Integer classe, Integer alias, Integer orgaoConcedente, Integer aliasClasseId) {
		return aliasClasseDAO.existe(classe, alias, orgaoConcedente, aliasClasseId);
	}

	@Override
	public List<AliasClasse> buscar(Integer classe, Integer alias, Integer orgaoConcedente) {
		return aliasClasseDAO.buscar(classe, alias, orgaoConcedente);
	}
}
