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.model.Template;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.TemplateLocalServiceUtil;
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.servlet.SessionErrors;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ParamUtil;

/**
 * Wizard representando o primeiro passo: Template
 * @author Henrique Simoes
 *
 */
public class WizardTemplateActionCommand extends WizardBaseActionCommand {

	private static final Log _log = LogFactoryUtil.getLog(WizardTemplateActionCommand.class);
	
	@Override
	public boolean processCommand(PortletRequest req, PortletResponse res) 
			throws PortletException {
		 super.processCommand(req, res);
		 
		 Template template = null;
		 
		 Mensagem mensagem = getMensagem(req);
		 
	/*	 Mensagem mensagem = null;
			try {
				mensagem = MensagemLocalServiceUtil.clonaMensagem(67802, req);
			} catch (PortalException | SystemException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}*/
		 
	 
		 if (mensagem != null && mensagem.getTemplate() != null){
			 template = mensagem.getTemplate(); 
		 }
		 
		 //tenta obter o id do parametro, caso não consiga, tenta do atributo da requisicao
		 long templateId = ParamUtil.getLong(req, "templateId", GetterUtil.getLong(req.getAttribute("templateId")));
		 
		 if (templateId >= 0) {
			 if ((template != null && template.getTemplateId() != templateId)
					 || template == null) {
				 try {
					 template = TemplateLocalServiceUtil.getTemplate(templateId);
					 
					 //atualizar dados da mensagem
					 mensagem.setTemplateId(templateId);
					 mensagem.setTemplate(template);
					 gravarMensagem(req, mensagem);
				 }
				 catch (PortalException|SystemException ex) {
					 _log.error("Problemas ao gravar wizard 'Template': " + templateId, ex);
					 SessionErrors.add(req, "erro-template-nao-encontrado");
					 GestaoMensagensUtil.descartarRascunhos(req);	
				 }
			 } else if (template != null){
				 PortletSession session = req.getPortletSession();
				 session.setAttribute("mensagem", mensagem);
 				 mensagem.setRascunho(true);
				 try {
					MensagemLocalServiceUtil.updateMensagem(mensagem);
				} catch (SystemException e) {
					GestaoMensagensUtil.descartarRascunhos(req);	
					throw new PortletException(e);
				}
			 }
		 }
		 
		 return true;
	}

}
