
package de.ivu.elect.presentation.kandidatur;

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

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.kandidatur.entity.Direktkandidatur;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.wahlvorschlag.boundary.DirektkandidatFactory;
import de.ivu.elect.business.wahlvorschlag.entity.Direktkandidat;
import de.ivu.elect.presentation.personenregister.AbstractPersonenregisterPersonendatenSelectionViewCreateViewHelper;

public abstract class AbstractDirektkandidaturCreateViewHelper extends AbstractPersonenregisterPersonendatenSelectionViewCreateViewHelper<Direktkandidatur> {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient KandidaturCreateViewHelper kandidaturCreateViewHelper;

  @Inject
  protected transient DirektkandidatFactory direktkandidatFactory;

  protected AbstractDirektkandidaturCreateViewHelper() {
    super();
  }

  public void preRenderView() {
    kandidaturCreateViewHelper.checkAutoCompleteOptionsExist(getSelectedWahl());
  }

  @Override
  @Nullable
  public String checkPreCondition() {
    if (isDirektwahlgebietSelected()) {
      return null;
    }

    return cancel();
  }

  private boolean isDirektwahlgebietSelected() {
    return isGebietSelected() && getSelectedGebiet().isDirektwahlgebiet();
  }

  public void init(Gebiet gebiet, Direktkandidatur direktkandidatur) {
    kandidaturCreateViewHelper.init(gebiet, createDirektkandidat(), direktkandidatur);
  }

  private Direktkandidat createDirektkandidat() {
    return direktkandidatFactory.create();
  }

  protected void tryAttachStaatsangehoerigkeiten(Personendaten personendaten) {
    kandidaturCreateViewHelper.tryAttachStaatsangehoerigkeiten(personendaten);
  }
}
