
package de.ivu.elect.presentation.niederschrift.form;

import static org.apache.commons.lang3.StringUtils.isNotBlank;

import de.ivu.elect.business.niederschrift.boundary.NiederschriftSearchParameters;
import de.ivu.elect.jee.presentation.dynamicform.AbstractTimestampProperty;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.LambdaTimestampBetweenProperty;
import de.ivu.elect.jee.presentation.dynamicform.Property;
import de.ivu.elect.jee.presentation.search.AbstractSearchParameters;

public class NiederschriftSearchFormBuilder extends AbstractNiederschriftViewFormBuilder {

  private static final long serialVersionUID = 1L;

  public NiederschriftSearchFormBuilder() {
    super();
  }

  public void addProperties(FormBuilder formBuilder, NiederschriftSearchParameters searchParameters) {
    addProperties(formBuilder, searchParameters, false);
  }

  public void addProperties(FormBuilder formBuilder, NiederschriftSearchParameters searchParameters, boolean readonly) {
    addPropertyIfNotBlankOrEditable(formBuilder, searchParameters.getNiederschriftArtenProperty(), readonly);

    addPropertyIfNotBlankOrEditable(formBuilder, searchParameters.getNiederschriftWahldurchfuehrungsgebietGebietsartProperty(), readonly);

    // ELECTMUC-2763, bei Anpassung der Reihenfolge siehe auch NiederschriftStatusAenderungViewFormBuilder#addProperties!
    addPropertyIfNotBlankOrEditable(formBuilder, searchParameters.getNeuesteNiederschriftStatusAenderungStatusProperty(), readonly);
    addPropertyIfNotBlankOrEditable(formBuilder, searchParameters.getNeuesteNiederschriftStatusAenderungRaumProperty(), AbstractSearchParameters.WILDCARD_TOOLTIP_MSG_KEY, readonly);
    addPropertyIfNotBlankOrEditable(formBuilder, searchParameters.getNeuesteNiederschriftStatusAenderungBesitzerProperty(), AbstractSearchParameters.WILDCARD_TOOLTIP_MSG_KEY, readonly);

    AbstractTimestampProperty neuesteNiederschriftStatusAenderungZeitstempelMinProperty = searchParameters.getNeuesteNiederschriftStatusAenderungZeitstempelMinProperty();
    neuesteNiederschriftStatusAenderungZeitstempelMinProperty.setRequired(!isNiederschriftErfassungMitWahlContext()); // NIE ALLE Entitäten aus der DB laden, daher den Zeitpunkt einschränken!

    AbstractTimestampProperty neuesteNiederschriftStatusAenderungZeitstempelMaxProperty = searchParameters.getNeuesteNiederschriftStatusAenderungZeitstempelMaxProperty();

    addPropertyIfNotBlankOrEditable(formBuilder, new LambdaTimestampBetweenProperty(getMessage("niederschrift.search.table.neuester.zeitstempel.column"),
        neuesteNiederschriftStatusAenderungZeitstempelMinProperty, neuesteNiederschriftStatusAenderungZeitstempelMaxProperty), readonly);
  }

  private void addPropertyIfNotBlankOrEditable(FormBuilder formBuilder, Property property, boolean readonly) {
    addPropertyIfNotBlankOrEditable(formBuilder, property, "", readonly);
  }

  private void addPropertyIfNotBlankOrEditable(FormBuilder formBuilder, Property property, String msgKeyTooltip, boolean readonly) {
    if (property.hasValue() || !readonly) {
      formBuilder.addProperty(property).withReadonly(readonly);

      if (isNotBlank(msgKeyTooltip)) {
        formBuilder.withTooltip(getMessage(msgKeyTooltip));
      }
    }
  }
}
