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

import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.wahlvorschlagsperson.entity.WahlvorschlagsPerson;
import de.ivu.elect.business.wahlvorschlagsperson.entity.WahlvorschlagsPersonProperties;
import de.ivu.elect.business.wahlvorschlagsperson.entity.WahlvorschlagsPersonTyp;
import de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.person.form.CommonPersonendatenViewFormBuilder;


import static java.util.Arrays.asList;

/*
 * NOTE ELECTMUC-521, dass extern abgeglichene Personendaten, bis auf den Wahlrechtsausschluss, bearbeitbar sind und
 * dass zusätzliche Personendaten, bspw. Kontaktdaten, erfasst werden, da diese für die Dokumente benötigt werden.
 */
public class BeauftragterViewFormBuilder extends AbstractWahlvorschlagsPersonViewFormBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  protected CommonPersonendatenViewFormBuilder personendatenViewFormBuilder;

  public BeauftragterViewFormBuilder() {
    super();
  }

  @Override
  public List<WahlvorschlagsPersonTyp> getRelevantWahlvorschlagsPersonTypen() {
    return asList(WahlvorschlagsPersonTyp.BEAUFTRAGTER, WahlvorschlagsPersonTyp.STELLVERTRETENDER_BEAUFTRAGTER);
  }

  @Override
  public void addProperties(FormBuilder formBuilder, WahlvorschlagsPerson beauftragter, boolean propertiesReadonly) {
    addWahlvorschlagsPersonProperties(formBuilder, beauftragter, propertiesReadonly);
    addWahlvorschlagsPersonPersonendatenProperties(formBuilder, beauftragter, propertiesReadonly);
    addWahlvorschlagsPersonAnschriftProperties(formBuilder, beauftragter, beauftragter.getAnschrift(), propertiesReadonly);
    addWahlvorschlagsPersonErreichbarkeitsdatenProperties(formBuilder, beauftragter, propertiesReadonly);
  }

  @Override
  protected void addWahlvorschlagsPersonPersonendatenProperties(FormBuilder formBuilder, WahlvorschlagsPerson beauftragter,
      boolean propertiesReadonly) {
    super.addWahlvorschlagsPersonPersonendatenProperties(formBuilder, beauftragter, propertiesReadonly);

    WahlvorschlagsPersonProperties wahlvorschlagsPersonProperties = beauftragter.getProperties();

    AbstractStringProperty titelProperty = wahlvorschlagsPersonProperties.getTitelProperty();

    formBuilder.addProperty(wahlvorschlagsPersonProperties.getAnredeProperty()).before(titelProperty).withReadonly(propertiesReadonly);
    formBuilder.addProperty(personendatenViewFormBuilder.createAkademischerGradProperty(beauftragter)).after(titelProperty)
        .withReadonly(propertiesReadonly);

    setWahlvorschlagsPersonPersonendatenPropertiesRequired(formBuilder, beauftragter);
  }
}
