
package de.ivu.elect.presentation.benutzerverwaltung;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

import javax.annotation.Nonnull;
import javax.inject.Named;

import de.ivu.elect.business.benutzerverwaltung.boundary.BenutzerSearchParameters;
import de.ivu.elect.business.benutzerverwaltung.entity.Benutzer;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerProperties;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.search.AbstractSearchParameters;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.security.AbstractGebietSecurityFilter;

@OnlineHilfeId("117")
@Named(AbstractBenutzerSearchView.COMPONENT_NAME)
public class BenutzerSearchView extends AbstractBenutzerSearchView {

  private static final long serialVersionUID = 1L;

  public BenutzerSearchView() {
    super();
  }

  @Override
  protected AbstractGebietSecurityFilter<Benutzer> getGebietSecurityFilter() {
    return KEIN_GEBIET_SECURITY_FILTER;
  }

  @Override
  protected void presetSearchParameters() {
    // nichts zu tun
  }

  @Override
  public BenutzerSearchParameters getSearchParameters() {
    BenutzerSearchParameters searchParameters = super.getSearchParameters();
    searchParameters.setMandant(getMandant());
    searchParameters.setVorhandeneRechte(bestimmeAlleMoeglichenRechteDesNutzers());
    return searchParameters;
  }

  @Nonnull
  private Set<UseCasePermission> bestimmeAlleMoeglichenRechteDesNutzers() {
    // ELECT-10491
    return Arrays.stream(UseCasePermission.values()).filter(value -> getPrincipal().isUnfilteredHasUseCasePermissionHandleWithCare(value))
        .collect(Collectors.toSet());
  }

  @Override
  public void addProperties(FormBuilder formBuilder) {
    BenutzerProperties benutzerProperties = searchParameters.getBenutzerProperties();

    String wildcardTooltip = getMessage(AbstractSearchParameters.WILDCARD_TOOLTIP_MSG_KEY);

    formBuilder.addProperty(benutzerProperties.getBenutzerkennungProperty()).withTooltip(wildcardTooltip).optional();
    formBuilder.addProperty(benutzerProperties.getFamiliennameProperty()).withTooltip(wildcardTooltip);
    formBuilder.addProperty(benutzerProperties.getVornameProperty()).withTooltip(wildcardTooltip);
    formBuilder.addProperty(benutzerProperties.getGesperrtProperty()).withLabel(getMessage("benutzer.search.nur.gesperrte.benutzer"));
  }

}
