
package de.ivu.elect.presentation.system.menu;

import java.util.EnumMap;
import java.util.Map;

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

import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.system.boundary.SystemLogExtendedDAO;
import de.ivu.elect.business.system.entity.LogNachrichtArt;
import de.ivu.elect.business.system.entity.SystemLogStatus;
import de.ivu.elect.presentation.system.SystemLogSearchView;

@RequestScoped
public class SystemLogUnbestaetigtSearchMenuItemEntry extends AbstractSystemLogMenuItemEntry {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient SystemLogExtendedDAO systemLogDao;

  private transient Map<LogNachrichtArt, Long> countNachArt;

  public SystemLogUnbestaetigtSearchMenuItemEntry() {
    super();
  }

  @Override
  protected UseCasePermission getUseCasePermission() {
    return UseCasePermission.SYSTEM_LOG_SEARCH;
  }

  @Override
  public boolean isDisabledInternal() {
    return super.isDisabledInternal() || !isUnbestaetigteMeldungVorhanden();
  }

  private boolean isUnbestaetigteMeldungVorhanden() {

    Map<LogNachrichtArt, Long> countNachArt = getCountNachArt();
    for (Map.Entry<LogNachrichtArt, Long> entry : countNachArt.entrySet()) {

      LogNachrichtArt logNachrichtArt = entry.getKey();
      Long anzahl = entry.getValue();

      if (logNachrichtArt.isWarnungOderFehlerZuBehandeln() && anzahl != null && anzahl > 0) {
        return true;
      }
    }
    return false;
  }

  @Override
  public String getTargetViewId() {
    return SystemLogSearchView.VIEW_ID; // action ausführen
  }

  public Map<LogNachrichtArt, Long> getCountNachArt() {
    if (countNachArt == null) {
      countNachArt = new EnumMap<>(LogNachrichtArt.class);
      for (LogNachrichtArt logNachrichtArt : LogNachrichtArt.values()) {
        countNachArt.put(logNachrichtArt, systemLogDao.findByCountStatusArt(getMandant(), SystemLogStatus.ZU_PRUEFEN, logNachrichtArt));
      }
    }
    return countNachArt;
  }

  @Override
  protected String getLabel() {
    return getMessage(getLabelKey(), getMessage("system.log.zu.pruefnen.mehrzahl"));
  }

  @Override
  public String getLabelKey() {
    return "entity.search.menu.item.label";
  }

  @Override
  public String getIcon() {
    return getIcons().getIconWarning();
  }
}
