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

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelect;
import de.ivu.elect.business.wahlvorschlag.entity.Liste;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagConstants;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.ViewFormBuilder;

public class ListeViewFormBuilder extends ViewFormBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlSessionSelect wahlSessionSelect;

  @Inject
  protected transient WahlvorschlagViewFormBuilder wahlvorschlagViewFormBuilder;

  @Inject
  private transient ListeListenverbindungEingereichtAutoCompleteOptionsProvider listeListenverbindungEingereichtAutoCompleteOptionsProvider;

  public ListeViewFormBuilder() {
    super();
  }

  public boolean hasSupportedPolitischeGruppen(Liste liste, Gebiet gebiet) {
    return wahlvorschlagViewFormBuilder.hasSupportedPolitischeGruppen(liste, gebiet);
  }

  public void addProperties(FormBuilder formBuilder, Liste liste, boolean readonly) {
    WahlvorschlagGruppeFinderProperty gruppeFinderProperty = wahlvorschlagViewFormBuilder.createGruppeFinderProperty(liste);

    addGruppeProperties(formBuilder, liste, gruppeFinderProperty);
    addWahlvorschlagProperties(formBuilder, liste, gruppeFinderProperty);
  }

  private void addGruppeProperties(FormBuilder formBuilder, Liste liste, WahlvorschlagGruppeFinderProperty gruppeFinderProperty) {
    wahlvorschlagViewFormBuilder.addGruppeProperties(formBuilder, liste, gruppeFinderProperty);
  }

  private void addWahlvorschlagProperties(FormBuilder formBuilder, Liste liste, WahlvorschlagGruppeFinderProperty gruppeFinderProperty) {
    wahlvorschlagViewFormBuilder.addSeparator(formBuilder, WahlvorschlagConstants.MESSAGE_KEY_ENTITY_EINZAHL);
    addNamenProperties(formBuilder, liste, gruppeFinderProperty);
    addEinreichungProperties(formBuilder, liste, gruppeFinderProperty);
  }

  private void addNamenProperties(FormBuilder formBuilder, Liste liste, WahlvorschlagGruppeFinderProperty gruppeFinderProperty) {
    wahlvorschlagViewFormBuilder.addNamenProperties(formBuilder, liste, gruppeFinderProperty);
  }

  protected void addEinreichungProperties(FormBuilder formBuilder, Liste liste, WahlvorschlagGruppeFinderProperty gruppeFinderProperty) {
    if (isListenverbindungenErfassbar()) {
      addListenverbindungEingereichtProperties(formBuilder, liste);
    }

    wahlvorschlagViewFormBuilder.addEinreichungProperties(formBuilder, liste, gruppeFinderProperty);
  }

  protected void addListenverbindungEingereichtProperties(FormBuilder formBuilder, Liste liste) {
    formBuilder.addProperty(new ListeListenverbindungEingereichtAutoCompleteProperty(liste, listeListenverbindungEingereichtAutoCompleteOptionsProvider));
  }

  private boolean isListenverbindungenErfassbar() {
    return wahlSessionSelect.isSelected() && wahlSessionSelect.getEntity().isWahlMitListenverbindungenErlaubt();
  }
}
