
package de.ivu.elect.business.kandidatur.boundary;

import static de.ivu.elect.jee.faces.FacesContextUtil.requireDevelopmentStage;

import javax.ejb.Stateless;
import javax.inject.Inject;

import de.ivu.elect.business.kandidatur.entity.Direktkandidatur;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.kandidatur.entity.KandidaturStatus;
import de.ivu.elect.business.kandidatur.entity.Listenkandidatur;
import de.ivu.elect.business.person.boundary.AbstractPersonZuTestzweckenZulasser;

/**
 * !!!!!! Klasse NICHT für Produktivzwecke gedacht !!!!!!
 */
@Stateless
public class KandidaturZuTestzweckenZulasser extends AbstractPersonZuTestzweckenZulasser {

  @Inject
  private transient ListenkandidaturDAO listenkandidaturDAO;

  @Inject
  private transient ListenkandidaturEdit listenkandidaturEdit;

  @Inject
  private transient DirektkandidaturDAO direktkandidaturDAO;

  public KandidaturZuTestzweckenZulasser() {
    super();
  }

  public void lasseDirektkandidaturZu(Direktkandidatur entity) {
    requireDevelopmentStage();

    Direktkandidatur direktkandidatur = direktkandidaturDAO.attach(entity);

    if (direktkandidatur.isUngeprueft()) {
      loesePersonenKonflikte(direktkandidatur);

      loeseWahlrechtspruefungenAlsErfuellt(direktkandidatur);
    }
  }

  public void lasseListenkandidaturZu(Listenkandidatur entity) {
    requireDevelopmentStage();

    Listenkandidatur listenkandidatur = listenkandidaturDAO.attach(entity);

    if (listenkandidatur.isUngeprueft()) {
      loesePersonenKonflikte(listenkandidatur);

      loeseWahlrechtspruefungenAlsErfuellt(listenkandidatur);

      setzeListenkandidaturAufZugelassen(listenkandidatur);
    }
  }

  protected void loeseWahlrechtspruefungenAlsErfuellt(Kandidatur kandidatur) {
    // in Core (vorerst) nichts zu tun
  }

  private void setzeListenkandidaturAufZugelassen(Listenkandidatur listenkandidatur) {
    listenkandidaturEdit.setStatus(listenkandidatur, KandidaturStatus.ZUGELASSEN, listenkandidatur.getBemerkung());
  }
}
