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

import java.util.List;

import javax.annotation.Nullable;

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.stimmzettel.entity.Stimmzettel;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelErfassungValidationEntry;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelKopfdatum;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelKopfdatumArt;

public class WahlberechtigteGesamtKopfdatumValidator extends AbstractStimmzettelKopfdatumValidator {
  private static final long serialVersionUID = 1L;

  @Override
  public StimmzettelErfassungValidationEntry validiere(StimmzettelKopfdatumArt art, @Nullable Gruppe gruppe, List<StimmzettelKopfdatum> stimmzettelKopfdaten, List<Stimmzettel> stimmzettel) {

    Long longValueGesamt = getLongValue(art, stimmzettelKopfdaten);
    Long longValueOhneWahlschein = getLongValue(StimmzettelKopfdatumArt.ANZAHL_WAHLBERECHTIGTE_OHNE_WAHLSCHEIN, stimmzettelKopfdaten);
    Long longValueMitWahlschein = getLongValue(StimmzettelKopfdatumArt.ANZAHL_WAHLBERECHTIGTE_MIT_WAHLSCHEIN, stimmzettelKopfdaten);

    if (longValueGesamt == null || longValueMitWahlschein == null || longValueOhneWahlschein == null) {
      return StimmzettelErfassungValidationEntry.SUCCESS;
    }

    if (longValueGesamt != (longValueMitWahlschein + longValueOhneWahlschein)) {
      return StimmzettelErfassungValidationEntry.createError("wes.stimmzettel.validator.wahlberechtigte.summe.stimmt.nicht");
    }

    return StimmzettelErfassungValidationEntry.SUCCESS;
  }

}
