package de.ivu.elect.presentation.personenpruefung;

import de.ivu.elect.business.personenpruefung.boundary.PersonPruefungKonfigurationChangeEvent;
import de.ivu.elect.business.personenpruefung.entity.PersonPruefungKonfiguration;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.UseCaseSecure;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.redirect.Redirect;
import de.ivu.elect.presentation.personenpruefung.form.PersonPruefungKonfigurationViewFormBuilder;
import org.apache.commons.lang3.StringUtils;

import javax.inject.Inject;
import javax.inject.Named;

@Named(AbstractPersonPruefungKonfigurationEditView.COMPONENT_NAME)
public class PersonPruefungKonfigurationEditView extends AbstractPersonPruefungKonfigurationEditView {

  @Inject
  private transient PersonPruefungKonfigurationViewFormBuilder personPruefungKonfigurationViewFormBuilder;

  @Inject
  private transient PersonPruefungKonfigurationChangeEvent changeEvent;

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

  @Override
  protected void addProperties(FormBuilder formBuilder, PersonPruefungKonfiguration personPruefungKonfiguration) {
    personPruefungKonfigurationViewFormBuilder.addProperties(formBuilder, personPruefungKonfiguration);
  }

  @Redirect
  @UseCaseSecure(UseCasePermission.PERSON_PRUEFUNG_KONFIGURATION_EDIT)
  @Override
  public String save() {
    String viewId = super.save();
    changeEvent.sendChangeEvent();
    return viewId;
  }

  @Redirect
  @UseCaseSecure(UseCasePermission.PERSON_PRUEFUNG_KONFIGURATION_EDIT)
  public String resetToDefault() {
    PersonPruefungKonfiguration personPruefungKonfiguration = getEntity();
    edit.resetToDefault(personPruefungKonfiguration);
    addInfoMessage("person.pruefung.konfiguration.action.reset.to.default.success.message",
        getEntityMetaEinzahlMessage(), personPruefungKonfiguration.getName());
    resetStateAfterAction();
    changeEvent.sendChangeEvent();
    return getParentViewId(); // definierter Parent, benutze deleteAndGoBack um zum vorherigen View zurückzukehren
  }

  public String getEntityMetaEinzahlMessage() {
    return entityMeta.getEinzahlMessage();
  }

  public String getName() {
    if (isEntitySet()) {
      return getEntity().getName();
    }
    return StringUtils.EMPTY;
  }
}
