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

import static java.util.Arrays.asList;

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.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.Property;
import de.ivu.elect.presentation.person.form.CommonPersonendatenViewFormBuilder;

/*
 * 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 transient 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();

    Property titelProperty = wahlvorschlagsPersonProperties.getTitelProperty();

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

    setWahlvorschlagsPersonPersonendatenPropertiesRequired(formBuilder, beauftragter);
  }
}
