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

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.konfiguration.entity.KonfigurationExtendedLoader;
import de.ivu.elect.business.niederschrift.entity.NiederschriftStatus;
import de.ivu.elect.business.niederschrift.entity.NiederschriftStatusAenderung;
import de.ivu.elect.business.niederschrift.entity.NiederschriftStatusAenderungProperties;
import de.ivu.elect.business.niederschrift.entity.NiederschriftStatusAenderungRaeume;
import de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.LambdaStringSelectOneProperty;
import de.ivu.elect.jee.presentation.dynamicform.SelectOneMenuProperty;

public class NiederschriftStatusAenderungViewFormBuilder extends AbstractNiederschriftViewFormBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient KonfigurationExtendedLoader konfigurationLoader;

  public NiederschriftStatusAenderungViewFormBuilder() {
    super();
  }

  public void addProperties(FormBuilder formBuilder, NiederschriftStatusAenderung niederschriftStatusAenderung, boolean readonly) {
    addProperties(formBuilder, niederschriftStatusAenderung, new ArrayList<>(NiederschriftStatus.getValuesErfassbarManuell()), readonly);
  }

  private void addProperties(FormBuilder formBuilder, NiederschriftStatusAenderung niederschriftStatusAenderung, List<NiederschriftStatus> statusValues, boolean readonly) {
    NiederschriftStatusAenderungProperties niederschriftStatusAenderungProperties = niederschriftStatusAenderung.getProperties();

    // Bei Anpassung der Reihenfolge siehe auch NiederschriftSearchFormBuilder#addProperties!
    formBuilder.addProperty(niederschriftStatusAenderungProperties.getStatusMitLeererAuswahlProperty()) //
        .setValues(statusValues) //
        .required() // ELECTMUC-2761
        .withReadonly(readonly);
    formBuilder.addProperty(createRaumMitLeererAuswahlProperty(niederschriftStatusAenderung)) //
        .required() // ELECTMUC-2761
        .withReadonly(readonly);
    formBuilder.addProperty(niederschriftStatusAenderungProperties.getBesitzerProperty()) //
        .optional() // ELECTMUC-2761
        .withReadonly(readonly);
  }

  private SelectOneMenuProperty<String> createRaumMitLeererAuswahlProperty(NiederschriftStatusAenderung niederschriftStatusAenderung) {
    AbstractStringProperty property = niederschriftStatusAenderung.getProperties().getRaumProperty();

    return new LambdaStringSelectOneProperty(property.getLabel(), property.isRequired(), property::setValue, property::getValue,
        new NiederschriftStatusAenderungRaeume(konfigurationLoader).getRaeume(), true) {

      @Override
      public String getNoSelectionLabel() {
        return "";
      }
    };
  }
}
