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 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.upload.UploadPortletRequest;
import com.liferay.util.bridges.mvc.ActionCommand;

/**
 * Action padr&atilde;o para os Wizard (Passo a passo) da cria&ccedil;&atilde;o da mensagem.
 * @author Henrique
 * 
 */
public abstract class WizardBaseActionCommand implements ActionCommand {

	private static final Log _log = LogFactoryUtil.getLog(WizardBaseActionCommand.class);
	
	/**
	 * Executar comando comum para todas as Actions relacionadas ao Wizard.
	 */
	public boolean processCommand(PortletRequest req, PortletResponse res) 
			throws PortletException {

		/*passoAtual = ParamUtil.getInteger(req, "passoAtual");
		passoAnterior = ParamUtil.getInteger(req, "passoAnterior");
		utilizarWizard = ParamUtil.getBoolean(req, "wizard");*/
		
		return false;
	}
	
	/**
	 * Tenta recuperar a mensagem de rascunho, caso nao exista, tenta recuperar a mensagem da sessao.
	 */
	protected Mensagem getMensagem(PortletRequest req) {
		try {
			return MensagemLocalServiceUtil.getMensagem(req);
		}
		catch (PortalException|SystemException ex) {
			_log.error("Problemas ao recuperar mensagem:", ex);
			GestaoMensagensUtil.descartarRascunhos(req);	
			return null;
		}
	}
	
	/**
	 * Tenta recuperar a mensagem de rascunho, caso nao exista, tenta recuperar a mensagem da sessao.
	 */
	protected Mensagem getMensagem(PortletRequest req,  UploadPortletRequest uploadReq) {
		try {
			return MensagemLocalServiceUtil.getMensagem(uploadReq , req);
		}
		catch (PortalException|SystemException ex) {
			_log.error("Problemas ao recuperar mensagem:", ex);
			GestaoMensagensUtil.descartarRascunhos(req);	
			return null;
		}
	}
	
	/**
	 * Grava a mensagem no banco de dados, definindo se &eacute; rascunho ou n&atilde;o, e em seguida define a refer&ecirc;ncia na sess&atilde;o.
	 * @param req
	 * @param mensagem
	 * @return {@link Mensagem}
	 * @throws SystemException
	 * @throws PortalException
	 */
	protected Mensagem gravarMensagem(PortletRequest req, Mensagem mensagem)
			throws SystemException, PortalException {
		PortletSession session = req.getPortletSession();
		
		mensagem.setRascunho(MensagemLocalServiceUtil.isRascunho(req));
		mensagem = MensagemLocalServiceUtil.updateMensagem(mensagem);
		
		session.setAttribute("mensagem", mensagem);
		
		return mensagem;
	}
	
	protected void removerMensagemSession(PortletRequest req) {
		req.getPortletSession().removeAttribute("mensagem");
		req.getPortletSession().removeAttribute("edicao");
		req.getPortletSession().removeAttribute("rascunhoRecuperado");
	}

}
