
package de.ivu.elect.presentation.benutzerverwaltung;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

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

import de.ivu.elect.business.benutzerverwaltung.entity.*;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.benutzerverwaltung.form.BenutzerViewFormBuilder;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;

@RequestScoped
@OnlineHilfeId("486")
@Named(AbstractBenutzerEditView.COMPONENT_NAME)
public class BenutzerEditView extends AbstractBenutzerEditView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient BenutzerViewFormBuilder benutzerViewFormBuilder;

  public BenutzerEditView() {
    super();
  }

  @Override
  protected boolean isGebietBearbeitenRechtPruefen() {
    return false;
  }

  public boolean isPasswortAendernMoeglich() {
    return benutzerViewFormBuilder.isPasswortAendernMoeglich(getEntity());
  }

  public String getPasswortFormatPattern() {
    return benutzerViewFormBuilder.getPasswortFormatPattern(getEntity().getMandant());
  }

  public String getPasswortFormatBeschreibung() {
    return benutzerViewFormBuilder.getPasswortFormatBeschreibung(getEntity().getMandant());
  }

  @Override
  public void addProperties(FormBuilder formBuilder, Benutzer benutzer) {
    benutzerViewFormBuilder.addProperties(formBuilder, benutzer);
  }

  @Override
  protected void callSave(Benutzer entity) {

    Map<RolleArt, RollePickListProperty> rollenPropertiesNachArt = benutzerViewFormBuilder.getRollenPropertiesNachArt();
    if (!rollenPropertiesNachArt.isEmpty()) {
      Set<Rolle> neueRollen = new HashSet<>();

      for (RollePickListProperty rollePickListProperty : rollenPropertiesNachArt.values()) {
        neueRollen.addAll(rollePickListProperty.getZurgeordneteRollen());
      }
      entity.setRollen(neueRollen);
    }

    super.callSave(entity);
  }
}
