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

import java.util.Collection;

import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.anschrift.entity.Anschrift;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.Property;

@Specializes
public class CommonAnschriftViewFormBuilder extends AnschriftViewFormBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient AnschriftPlzAutoCompleteOptionsProvider anschriftPlzAutoCompleteOptionsProvider;

  public CommonAnschriftViewFormBuilder() {
    super();
  }

  @Override
  public void addLokalitaetAnschriftProperties(FormBuilder formBuilder, Anschrift anschrift, boolean propertiesReadonly) {
    super.addLokalitaetAnschriftProperties(formBuilder, anschrift, propertiesReadonly);

    formBuilder.selectPropertyByClass(AnschriftOrtAutoUpdateProperty.class).withLabel(getMessage(LOKALITAET_MESSAGE_KEY_ORT_EINZAHL));
  }

  @Override
  protected void addPlzOrtProperties(FormBuilder formBuilder, Personendaten personendaten, Anschrift anschrift, boolean propertiesErweitertInitialVisibleOnPageLoad, boolean propertiesReadonly,
      Collection<Class< ? extends Property>> personenregisterPropertiesUebernommen, boolean personenregisterPropertiesReadonly) {
    Property plzProperty = new AnschriftPlzAutoCompleteProperty(anschrift, anschriftPlzAutoCompleteOptionsProvider);

    addPersonenregisterProperty(formBuilder, personendaten, plzProperty, propertiesErweitertInitialVisibleOnPageLoad, propertiesReadonly, personenregisterPropertiesUebernommen,
        personenregisterPropertiesReadonly);
    addPersonenregisterProperty(formBuilder, personendaten, new AnschriftOrtAutoUpdateProperty(anschrift), propertiesErweitertInitialVisibleOnPageLoad, propertiesReadonly,
        personenregisterPropertiesUebernommen, personenregisterPropertiesReadonly).withObservedProperty(plzProperty);
    addPersonenregisterProperty(formBuilder, personendaten, new AnschriftOrtsteilAutoUpdateProperty(anschrift), propertiesErweitertInitialVisibleOnPageLoad, propertiesReadonly,
        personenregisterPropertiesUebernommen, personenregisterPropertiesReadonly).withObservedProperty(plzProperty);
  }

  @Override
  public Collection<Class< ? extends Property>> getDefaultPersonenregisterPropertiesUebernommen(Personendaten personendaten) {
    Collection<Class< ? extends Property>> result = super.getDefaultPersonenregisterPropertiesUebernommen(personendaten);

    result.add(AnschriftPlzAutoCompleteProperty.class);
    result.add(AnschriftOrtAutoUpdateProperty.class);

    return result;
  }
}
