
package de.ivu.elect.business.pruefung.control;

import javax.inject.Inject;

import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagUnterstuetzerNotwendigErmittler;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.business.wahlvorschlagsperson.boundary.AbstractWahlvorschlagsPersonDAO;

public class WahlvorschlagUnterstuetzerAnzahlErforderlichZulassungPruefSchritt extends AbstractZulassungPruefSchritt implements WahlvorschlagZulassungPruefSchritt {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlvorschlagUnterstuetzerNotwendigErmittler wahlvorschlagUnterstuetzerNotwendigErmittler;

  public WahlvorschlagUnterstuetzerAnzahlErforderlichZulassungPruefSchritt() {
    super();
  }

  @Override
  public boolean isZulassungErlaubt(Wahlvorschlag wahlvorschlag, AbstractWahlvorschlagsPersonDAO wahlvorschlagsPersonDAO, EntityAufStimmzettelDaten entityAufStimmzettelDaten) {
    if (wahlvorschlag.isUnterstuetzerErforderlich(wahlvorschlagUnterstuetzerNotwendigErmittler)) {
      return getAnzahlErforderlicherUnterstuetzer(wahlvorschlag) <= getAnzahlGeeigneterUnterstuetzer(wahlvorschlag, wahlvorschlagsPersonDAO);
    }

    return true;
  }

  private long getAnzahlErforderlicherUnterstuetzer(Wahlvorschlag wahlvorschlag) {
    return fixNullToZero(wahlvorschlag.getGebiet().getAnzahlErforderlicherUnterstuetzer());
  }

  private long getAnzahlGeeigneterUnterstuetzer(Wahlvorschlag wahlvorschlag, AbstractWahlvorschlagsPersonDAO wahlvorschlagsPersonDAO) {
    return wahlvorschlag.getAnzahlUnterstuetzerGeeignetGesamt(wahlvorschlagsPersonDAO);
  }

  @Override
  public String getGrundFuerVerweigerungDerZulassung(Wahlvorschlag wahlvorschlag) {
    return getMessage("WahlvorschlagZulassungPruefer.anzahl.unterstuetzer.nicht.ausreichend");
  }
}
