
package de.ivu.elect.presentation.kandidatur;

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppe.boundary.PolitischeGruppeFactory;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;
import de.ivu.elect.business.kandidatur.entity.Direktkandidatur;
import de.ivu.elect.business.kandidatur.entity.WaehlerBenannteKandidaturen;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.boundary.WaehlerBenannterWahlvorschlagBoundaryCreate;
import de.ivu.elect.business.wahlvorschlag.entity.Direktkandidat;
import de.ivu.elect.presentation.kandidatur.form.WaehlerBenannteKandidaturViewFormBuilder;

public class WaehlerBenannteDirektkandidaturCreateViewHelper extends AbstractDirektkandidaturCreateViewHelper {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient PolitischeGruppeFactory politischeGruppeFactory;

  @Inject
  private transient WaehlerBenannterWahlvorschlagBoundaryCreate waehlerBenannterWahlvorschlagBoundaryCreate;

  @Inject
  private transient WaehlerBenannteKandidaturViewFormBuilder waehlerBenannteKandidaturViewFormBuilder;

  public WaehlerBenannteDirektkandidaturCreateViewHelper() {
    super();
  }

  @Override
  public String getViewId() {
    return WaehlerBenannteDirektkandidaturCreateView.VIEW_ID;
  }

  @Override
  public String getParentViewId() {
    return WaehlerBenannteDirektkandidaturCreateView.PARENT_VIEW_ID;
  }

  @Override
  protected WaehlerBenannteKandidaturViewFormBuilder getViewFormBuilder() {
    return waehlerBenannteKandidaturViewFormBuilder;
  }

  @Override
  public void init(Gebiet gebiet, Direktkandidatur direktkandidatur) {
    Wahl wahl = gebiet.getWahl();

    super.init(gebiet, direktkandidatur);

    String kennwortDefault = waehlerBenannterWahlvorschlagBoundaryCreate.generateWaehlerBenannterDirektkandidatKennwort(wahl);
    String kurznameDefault = kennwortDefault;

    PolitischeGruppe politischeGruppe = createWaehlerBenannteGruppe();
    politischeGruppe.setWahl(wahl);

    Direktkandidat direktkandidat = direktkandidatur.getDirektkandidat();
    direktkandidat.getGruppeImGebiet().setGruppe(politischeGruppe);
    direktkandidat.setKennwort(kennwortDefault);
    direktkandidat.setKurzname(kurznameDefault);

    direktkandidatur.setKandidaturStatus(WaehlerBenannteKandidaturen.WAEHLER_BENANNTE_KANDIDATUR_KANDIDATUR_STATUS_DEFAULT);
  }

  @Override
  public String getEntityEinzahlMessage() {
    return getViewFormBuilder().getEntityEinzahlMessage(getSelectedGebiet());
  }

  private PolitischeGruppe createWaehlerBenannteGruppe() {
    return politischeGruppeFactory.create(); // Schlüssel, etc. wird beim Speichern vergeben!
  }
}
