
package de.ivu.elect.presentation.ui;

import java.io.Serializable;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.benutzerverwaltung.control.PrincipalBenutzerParameterLoader;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerEinstellungenMessagePosition;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerEinstellungenMessageSeverity;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerEinstellungenMessageStickiness;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerParameterWerte;

@RequestScoped
@Named(ElectOutputMessagesHelper.COMPONENT_NAME)
public class ElectOutputMessagesHelper implements Serializable {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "outputMessagesHelper";

  @Inject
  private transient PrincipalBenutzerParameterLoader principalBenutzerParameterLoader;

  private final long autoCloseUUID;

  public ElectOutputMessagesHelper() {
    super();

    this.autoCloseUUID = hashCode();
  }

  public boolean isAutoCloseEnabled() {
    return !getMessageStickiness().isSticky() && getAutoCloseTimeoutInMs() > 0;
  }

  private BenutzerEinstellungenMessageStickiness getMessageStickiness() {
    BenutzerEinstellungenMessageStickiness benutzerEinstellungenMessageStickiness = principalBenutzerParameterLoader
        .resolveEnumValue(BenutzerParameterWerte.POPUP_MELDUNGEN_ENTFERNEN, BenutzerEinstellungenMessageStickiness.class);
    if (benutzerEinstellungenMessageStickiness == null) {
      return BenutzerEinstellungenMessageStickiness.STICKY;
    }
    return benutzerEinstellungenMessageStickiness;
  }

  public long getAutoCloseUUID() {
    return autoCloseUUID;
  }

  public int getAutoCloseTimeoutInMs() {
    return getMessageStickiness().getTimeoutInMs();
  }

  /**
   * @deprecated Kann nach Lösung von ELECT-7118 entfernt werden, cf. elect-base-war/src/main/resources/META-INF/contracts/elect/WEB-INF/tags/outputMessages.xhtml!
   * @see ElectOutputMessagesHelper#isAutoCloseEnabled
   */
  @Deprecated
  public boolean isSticky() {
    return getMessageStickiness().isSticky();
  }

  public String getSeverity() {
    BenutzerEinstellungenMessageSeverity benutzerEinstellungenMessageSeverity = principalBenutzerParameterLoader
        .resolveEnumValue(BenutzerParameterWerte.ANZUZEIGENDE_MELDUNGSARTEN, BenutzerEinstellungenMessageSeverity.class);

    if (benutzerEinstellungenMessageSeverity == null) {
      benutzerEinstellungenMessageSeverity = BenutzerEinstellungenMessageSeverity.INFO;
    }

    return benutzerEinstellungenMessageSeverity.getSeverity();
  }

  private BenutzerEinstellungenMessagePosition getMessagePosition() {
    BenutzerEinstellungenMessagePosition benutzerEinstellungenMessagePosition = principalBenutzerParameterLoader
        .resolveEnumValue(BenutzerParameterWerte.MESSAGE_POSITION, BenutzerEinstellungenMessagePosition.class);
    if (benutzerEinstellungenMessagePosition == null) {
      return BenutzerEinstellungenMessagePosition.POPUP;
    }
    return benutzerEinstellungenMessagePosition;
  }

  public boolean isPopup() {
    return getMessagePosition().isPopup();
  }


  public boolean isEditorOben() {
    return getMessagePosition().isEditorOben();
  }
}
