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

import javax.annotation.Nullable;
import javax.inject.Inject;

import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.entity.Direktkandidat;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagConstants;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.ViewFormBuilder;

public class DirektkandidatViewFormBuilder extends ViewFormBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlvorschlagViewFormBuilder wahlvorschlagViewFormBuilder;

  public DirektkandidatViewFormBuilder() {
    super();
  }

  public void addProperties(FormBuilder formBuilder, Direktkandidat direktkandidat) {
    WahlvorschlagGruppeFinderProperty gruppeFinderProperty = wahlvorschlagViewFormBuilder.createGruppeFinderProperty(direktkandidat);

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

  // Cf. EinzelkandidatViewFormBuilder#addGruppeProperties!
  private void addGruppeProperties(FormBuilder formBuilder, Direktkandidat direktkandidat, WahlvorschlagGruppeFinderProperty gruppeFinderProperty) {
    wahlvorschlagViewFormBuilder.addGruppeProperties(formBuilder, direktkandidat, gruppeFinderProperty);
  }

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

  protected void addNamenProperties(FormBuilder formBuilder, Direktkandidat direktkandidat, WahlvorschlagGruppeFinderProperty gruppeFinderProperty) {
    wahlvorschlagViewFormBuilder.addNamenProperties(formBuilder, direktkandidat, gruppeFinderProperty, isWahlvorschlagKennwortRequired());
  }

  protected void addEinreichungProperties(FormBuilder formBuilder, Direktkandidat direktkandidat, WahlvorschlagGruppeFinderProperty gruppeFinderProperty) {
    wahlvorschlagViewFormBuilder.addEinreichungProperties(formBuilder, direktkandidat, gruppeFinderProperty);
  }

  public void addSeparator(FormBuilder formBuilder, String msgKey, Object... params) {
    wahlvorschlagViewFormBuilder.addSeparator(formBuilder, msgKey, params);
  }

  protected boolean isWahlvorschlagKennwortRequired() {
    return true; // ELECT-14262, LEGACY...
  }

  @Nullable
  protected Wahl getWahl() {
    return wahlvorschlagViewFormBuilder.getWahl();
  }
}
