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

import java.io.Serializable;
import java.util.Arrays;

import javax.inject.Inject;

import de.ivu.elect.business.wahlrechtspruefung.entity.Pruefkriterium;
import de.ivu.elect.business.wahlrechtspruefung.entity.PruefkriteriumProperties;
import de.ivu.elect.business.wahlrechtspruefung.entity.WahlrechtspruefStatus;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.PropertyType;

public class PruefkriteriumViewFormBuilder implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private PruefkriteriumUniqueUKFacesValidator pruefkriteriumUniqueTKFacesValidator;

  public PruefkriteriumViewFormBuilder() {
    super();
  }

  public void buildModel(FormBuilder formBuilder, Pruefkriterium pruefkriterium) {
    var pruefkriteriumProperties = pruefkriterium.getProperties();

    formBuilder.addProperty(pruefkriteriumProperties.getPositionProperty()).withValidatorAndPk(pruefkriteriumUniqueTKFacesValidator,
        pruefkriterium.getPk());

    // ELECT-3115
    formBuilder.addProperty(pruefkriteriumProperties.getPruefkriteriumBezugMitLeererAuswahlProperty()).required()
        .withReadonly(pruefkriterium.isPersistent()); // Nachträglich nicht mehr änderbar, da alle Wahlrechtsprüfungen bereits angelegt sind...
    formBuilder.addProperty(pruefkriteriumProperties.getPruefkriteriumGruppeArtProperty())
        .withReadonly(pruefkriterium.isPersistent()); //Nachträglich nicht mehr änderbar, da alle Wahlrechtsprüfungen bereits angelegt sind...

    formBuilder.addProperty(pruefkriteriumProperties.getKategorieProperty());
    formBuilder.addProperty(pruefkriteriumProperties.getUnterkategorieProperty());
    formBuilder.addProperty(pruefkriteriumProperties.getKriteriumtextProperty());
    formBuilder.addProperty(pruefkriteriumProperties.getTextFuerProtokollErfuelltProperty()).withType(PropertyType.INPUT_TEXTAREA);
    formBuilder.addProperty(pruefkriteriumProperties.getTextFuerProtokollNichtErfuelltProperty()).withType(PropertyType.INPUT_TEXTAREA);
    formBuilder.addProperty(pruefkriteriumProperties.getTextFuerProtokollFristProperty()).withType(PropertyType.INPUT_TEXTAREA);
    formBuilder.addProperty(pruefkriteriumProperties.getHeilungsfaehigProperty());
    formBuilder.addProperty(pruefkriteriumProperties.getFristInTagenBisZurWahlProperty());
    formBuilder.addProperty(pruefkriteriumProperties.getKannIrrelevantSeinProperty());
    formBuilder.addProperty(pruefkriteriumProperties.getTeilDerSofortpruefungProperty());
    formBuilder.addProperty(pruefkriteriumProperties.getWahlrechtlichRelevantProperty());

    // ELECT-15939
    PruefkriteriumProperties.InitialerStatusProperty initialerStatusProperty = pruefkriteriumProperties.getInitialerStatusProperty();
    initialerStatusProperty.setValueFilter(wahlrechtspruefStatus -> Arrays.asList(WahlrechtspruefStatus.UNGEPRUEFT, WahlrechtspruefStatus.ERFUELLT).contains(wahlrechtspruefStatus));
    formBuilder.addProperty(initialerStatusProperty);
  }

}
