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

import java.util.Date;
import java.util.List;

import javax.portlet.PortletRequest;

import br.mp.mprj.portal.portlet.gestaomensagens.service.model.AnexoMensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.base.AnexoMensagemLocalServiceBaseImpl;

import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;

/**
 * The implementation of the anexo mensagem 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.AnexoMensagemLocalService} 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.AnexoMensagemLocalServiceBaseImpl
 * @see br.mp.mprj.portal.portlet.gestaomensagens.service.service.AnexoMensagemLocalServiceUtil
 */
public class AnexoMensagemLocalServiceImpl
    extends AnexoMensagemLocalServiceBaseImpl {
    /*
     * NOTE FOR DEVELOPERS:
     *
     * Never reference this interface directly. Always use {@link br.mp.mprj.portal.portlet.gestaomensagens.service.service.AnexoMensagemLocalServiceUtil} to access the anexo mensagem local service.
     */
	
	public AnexoMensagem criarAnexo(PortletRequest req) throws SystemException{
		
		final AnexoMensagem anexoMensagem =  createAnexoMensagem(CounterLocalServiceUtil.increment());
		final ThemeDisplay themeDisplay = (ThemeDisplay) req.getAttribute(WebKeys.THEME_DISPLAY);

		anexoMensagem.setUserId(themeDisplay.getUserId());
		anexoMensagem.setGroupId(themeDisplay.getScopeGroupId());
		anexoMensagem.setCompanyId(themeDisplay.getCompanyId());
		anexoMensagem.setDataCriacao(new Date());
		anexoMensagem.setAtivo(false);
		
		return anexoMensagem;
		
	}
	
	/**
	 * Metodo responsavel por atualizar os anexos na base de dados.
	 */
	public void atualizaAnexos(List<AnexoMensagem> anexos) throws SystemException{
		
		for (AnexoMensagem anexo : anexos){
			updateAnexoMensagem(anexo);
		}
	}	
	/**
	 * Metodo responsavel por remover os anexos de uma mensagem.
	 */
	public void removeAnexos(List<AnexoMensagem> anexos) throws SystemException{
		
		for (AnexoMensagem anexo : anexos){
			 deleteAnexoMensagem(anexo);
		}
	}	
	/**
	 * Metodo responsavel em recuperar todos anexos de uma mensagem.
	 * @param mensagemId - identificado da mensagem.
	 * @return List<AnexoMensagem> - retorna uma lista de anexos.
	 * @throws SystemException - Em caso de falha.
	 */
	public List<AnexoMensagem> recuperaAnexosPorMensagem(long mensagemId) throws SystemException{
		return anexoMensagemPersistence.findByMensagemIdAtivo(mensagemId, true);
	}
}
