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

import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.person.boundary.PersonendatenDAO;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.boundary.PersonenPruefungStarter;
import de.ivu.elect.business.personenpruefung.boundary.PersonenPruefungVorbereiter;

import javax.ejb.Stateless;
import javax.inject.Inject;
import java.io.Serializable;
import java.util.Collection;

@Stateless
public class PersonenregisterAbgleichStarter implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private PersonendatenDAO personendatenDao;

  @Inject
  private PersonenregisterSwitch personenregisterSwitch;

  @Inject
  private PersonenPruefungVorbereiter personenPruefungVorbereiter;

  @Inject
  private PersonenPruefungStarter personenPruefungStarter;

  public PersonenregisterAbgleichStarter() {
    super();
  }

  public boolean isPersonenregisterAvailable(Mandant mandant) {
    return personenregisterSwitch.isPersonenregisterAvailable(mandant);
  }

  public String getPersonenregisterKurzname(Mandant mandant) {
    return personenregisterSwitch.getPersonenregister(mandant).getKurzname();
  }

  public void startPersonenregisterAbgleich(Collection< ? extends Personendaten> personendaten) {
    for (Personendaten person : personendaten) {
      preparePersonenregisterAbgleichPruefSchritt(person);
    }

    startPersonenPruefung();
  }

  public void startPersonenregisterAbgleich(Personendaten personendaten) {
    preparePersonenregisterAbgleichPruefSchritt(personendaten);

    startPersonenPruefung();
  }

  private void preparePersonenregisterAbgleichPruefSchritt(Personendaten personendaten) {
    personenPruefungVorbereiter.preparePersonenregisterAbgleichPruefSchritt(attach(personendaten));
  }

  private Personendaten attach(Personendaten personendaten) {
    return personendatenDao.attach(personendaten);
  }

  private void startPersonenPruefung() {
    personenPruefungStarter.startePersonenPruefung();
  }
}
