package de.ivu.elect.presentation.ui;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;

import org.apache.deltaspike.core.api.scope.WindowScoped;

/**
 * Im WES wurden die Nachrichten beim Speichern der Stimmzettel nicht angezeigt, wenn der Button zum Speichern als ajax=true markiert ist (und in diesem
 * Fall sein muss) und danach ein redirect erfolgte => Nachrichten merken und später anzeigen
 */
@WindowScoped
@Named(ElectFacesMessageStore.COMPONENT_NAME)
public class ElectFacesMessageStore implements Serializable {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "electFacesMessageStore";

  private final List<FacesMessage> messages = new ArrayList<>();

  public void saveMessages() {
    var currentInstance = FacesContext.getCurrentInstance();
    var messageList = currentInstance.getMessageList();
    if (!messageList.isEmpty()) {
      this.messages.addAll(messageList);
      for (var facesMessage : messageList) {
        facesMessage.rendered();
      }
    }
  }

  public void restoreMessages() {
    if (!messages.isEmpty()) {
      var currentInstance = FacesContext.getCurrentInstance();
      if (currentInstance.getMessageList().isEmpty()/*nur, wenn noch leer, damit keine Dopplungen*/) {
        for (var message : messages) {
          currentInstance.addMessage(null, message);
        }
      }
      messages.clear();
    }
  }

}
