package br.mp.mprj.portal.portlet.gestaomensagens.action;

import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletSession;

import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;

import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.ParamUtil;

/**
 * ActionCommand específico para descartar rascunho.
 * @author Henrique
 *
 */
public class WizardMensagemDescartarActionCommand 
		extends WizardBaseActionCommand {

	private static final Log _log = LogFactoryUtil.getLog(WizardMensagemDescartarActionCommand.class);
	
	@Override
	public boolean processCommand(PortletRequest req, PortletResponse res)
			throws PortletException {
		super.processCommand(req, res);
		
		long mensagemId = ParamUtil.getLong(req, "mensagemId");
		Mensagem mensagem = null;
		
		try {
			 mensagem = MensagemLocalServiceUtil.getMensagem(mensagemId);
		} catch (PortalException | SystemException e) {
			_log.error("Ocorreu um erro ao tentar recuperar a mensagem : " + e.getMessage());
			GestaoMensagensUtil.descartarRascunhos(req);	
		}
		
		try {
			if (mensagem.getStatusWorkflow() != StatusWorkflowEnum.PENDENTE_REVISAO.getStatus() && !ParamUtil.getBoolean(req, "edicao")){
				MensagemLocalServiceUtil.deleteMensagem(mensagemId);
			}else {
				mensagem.setRascunho(false);
				MensagemLocalServiceUtil.updateMensagem(mensagem);
			}
			
			PortletSession session = req.getPortletSession();
			session.removeAttribute("mensagem");
			session.removeAttribute("rascunhoRecuperado");
			session.removeAttribute("edicao");
			
			return true;
		}
		catch (PortalException|SystemException ex) {
			_log.error("Problemas ao descartar rascunho:", ex);
			GestaoMensagensUtil.descartarRascunhos(req);	
			return false;
		}
	}
}
