package br.mp.mprj.portal.portlet.gestaomensagens.service.service.impl;

import java.util.List;

import br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.GrupoDestinatarioModelImpl;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.base.GrupoDestinatarioLocalServiceBaseImpl;

import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.OrderByComparatorFactoryUtil;
import com.liferay.portal.kernel.util.Validator;

/**
 * The implementation of the grupo destinatario local service.
 *
 * <p>
 * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy their definitions into the {@link br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalService} interface.
 *
 * <p>
 * This is a local service. Methods of this service will not have security checks based on the propagated JAAS credentials because this service can only be accessed from within the same VM.
 * </p>
 *
 * @author Henrique Simoes
 * @see br.mp.mprj.portal.portlet.gestaomensagens.service.service.base.GrupoDestinatarioLocalServiceBaseImpl
 * @see br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil
 */
public class GrupoDestinatarioLocalServiceImpl
    extends GrupoDestinatarioLocalServiceBaseImpl {
    /*
     * NOTE FOR DEVELOPERS:
     *
     * Never reference this interface directly. Always use {@link br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil} to access the grupo destinatario local service.
     */
	/**
	 * Insere um novo Grupo de Destinatario.
	 */
	public void inserirGrupoDestinatario( GrupoDestinatario grupoDestinatario, 
			  List<EmailDestinatario> emailsDestinatario) throws SystemException{
		
		updateGrupoDestinatario(grupoDestinatario);		
		
		for (EmailDestinatario email : emailsDestinatario){
			emailDestinatarioLocalService.addEmailDestinatario(email);
		}	
	}
	
	/**
	 * Atualiza um Grupo de Destinatario existente.
	 */
	public void atualizarGrupoDestinatario( GrupoDestinatario grupoDestinatario, 
			  List<EmailDestinatario> emailsDestinatario) throws SystemException{
		
		emailDestinatarioPersistence.removeByGrupoDestinatarioId(grupoDestinatario.getGrupoDestinatarioId());
		updateGrupoDestinatario(grupoDestinatario);
		
		
		for (EmailDestinatario email : emailsDestinatario){			
			emailDestinatarioLocalService.updateEmailDestinatario(email);
		}
		
	}
	
	
	/**
	 * Exclui logicamente um Grupo de Destinatario.
	 * @throws SystemException 
	 * @throws PortalException 
	 */
	public void removerGrupoDestinatario(long grupoDestinatarioId) throws PortalException, SystemException{
		
		GrupoDestinatario grupoDestinatario = getGrupoDestinatario(grupoDestinatarioId);
		grupoDestinatario.setAtivo(false);
		updateGrupoDestinatario(grupoDestinatario);
	}
	
	/**
	 * Metodo responsavel por recupera todas as listas de destinatarios e de saida.
	 */
	public List<GrupoDestinatario> listaTodos() throws SystemException{
		
		final OrderByComparator orderByComparator = OrderByComparatorFactoryUtil.create(GrupoDestinatarioModelImpl.TABLE_NAME, "nome", true);
		return grupoDestinatarioPersistence.findAll(QueryUtil.ALL_POS, QueryUtil.ALL_POS , orderByComparator);
	}
	
	public List<GrupoDestinatario> findByTipoListaAtivo(int tipoLista, boolean ativo)
			throws PortalException, SystemException {
		return grupoDestinatarioPersistence.findByTipoListaAtivo(tipoLista, ativo);
	}
	
	/**
	 * Faz a busca da lista pelos ID's identificados na String (separador: espa&ccedil;o em branco).
	 * @param ids
	 * @return
	 * @throws PortalException
	 * @throws SystemException
	 */
	public List<GrupoDestinatario> findByGrupoDestinatarioIdArray(String ids) 
			throws PortalException, SystemException {
		if (Validator.isNull(ids)) return null;
		return grupoDestinatarioPersistence.findByGrupoDestinatarioIdArray(GetterUtil.getLongValues(ids.split("\\s")));
	}
}
