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

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Agendamento;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Template;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;

/**
 * The extended model implementation for the Mensagem service. Represents a row
 * in the &quot;PRT_GESTMSG_MENSAGEM&quot; database table, with each column
 * mapped to a property of this class.
 *
 * <p>
 * Helper methods and all application logic 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.model.Mensagem}
 * interface.
 * </p>
 *
 * @author Henrique Simoes
 */
public class MensagemImpl extends MensagemBaseImpl {
	
	private String descricaoStatus;

	private Template template;
	
	private List<Agendamento> agendamentos;
	
	private Map<Long, Map<String, Agendamento>> datasCalendario;
	
	private boolean gravarAgendamento;

	public MensagemImpl() {
	}

	public void setTemplate(Template template) {
		this.template = template;
	}

	public Template getTemplate() {
		return template;
	}

	/**
	 * Objeto com todas as informações referentes ao agendamento: <br>
	 * <ul>
	 * <li>data/hora selecionadas no calendário</li>
	 * <li>configurações de recorrência</li>
	 * <li>datas calculadas da recorrência</li>
	 * </ul>
	 */
	public List<Agendamento> getAgendamentos() {
		if (agendamentos == null) {
			agendamentos = new ArrayList<>();
		}
		return agendamentos;
	}

	public void setAgendamentos(List<Agendamento> agendamentos) {
		this.agendamentos = agendamentos;
	}

	/**
	 * Informa&ccedil;&atilde;o auxiliar para identificar quais datas (sem a hora) foram
	 * selecionadas no calend&aacute;rio. <br>
	 * Cada entrada no Map principal utiliza a data no formato UNIX (GMT-3).<br>
	 * O Map interno representa os horarios, identificados pelo texto representando a hora e contendo um objeto {@link Agendamento}.
	 */
	public Map<Long, Map<String, Agendamento>> getDatasCalendario() {
		if (datasCalendario == null) {
			datasCalendario = new TreeMap<>();
		}
		return datasCalendario;
	}

	public void setDatasCalendario(Map<Long, Map<String, Agendamento>> datasCalendario) {
		this.datasCalendario = datasCalendario;
	}

	public boolean isGravarAgendamento() {
		return gravarAgendamento;
	}

	public void setGravarAgendamento(boolean gravarAgendamento) {
		this.gravarAgendamento = gravarAgendamento;
	}

	public String getDescricaoStatus() {
		return StatusWorkflowEnum.getDescricao(getStatusWorkflow());
	}

	public void setDescricaoStatus(String descricaoStatus) {
		this.descricaoStatus = descricaoStatus;
	}


}
