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

import java.io.Serializable;

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

import de.ivu.elect.business.gebietsbaum.entity.AWerteStatistikResult;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;

@Stateless
public class AWerteStatistik implements Serializable {
  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahldurchfuehrungsgebietDAO wahldurchfuehrungsgebietDAO;


  public AWerteStatistikResult bestimmeAWerteStatistik(Gebiet gebietNotAttched){

    Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet = wahldurchfuehrungsgebietDAO.findByPrimaryKey(gebietNotAttched.getPk());

    long anzahlGebieteInsgesamt = 0L;
    long anzahlA1Gesetzt = 0L;
    long anzahlA1NichtGesetzt = 0L;
    long anzahlA2Gesetzt = 0L;
    long anzahlA2NichtGesetzt = 0L;
    long anzahlA3Gesetzt = 0L;
    long anzahlA3NichtGesetzt = 0L;


    for (Wahldurchfuehrungsgebiet anderesGebiet : wahldurchfuehrungsgebietDAO.findByWahl(wahldurchfuehrungsgebiet.getWahl())) {
      if (anderesGebiet.isUrnenwahlgebiet() && wahldurchfuehrungsgebiet.isInGebietshierarchieUebergeordnetesGebietVon(anderesGebiet)){
        anzahlGebieteInsgesamt++;
        if (anderesGebiet.hasAnzahlWahlberechtigteOhneWahlschein()) {
          anzahlA1Gesetzt++;
        } else{
          anzahlA1NichtGesetzt++;
        }
        if (anderesGebiet.hasAnzahlWahlberechtigteMitWahlschein()) {
          anzahlA2Gesetzt++;
        } else{
          anzahlA2NichtGesetzt++;
        }
        if (anderesGebiet.hasAnzahlWahlberechtigteNichtImWaehlerverzeichnis()) {
          anzahlA3Gesetzt++;
        } else{
          anzahlA3NichtGesetzt++;
        }
      }
    }



    return new AWerteStatistikResult(anzahlGebieteInsgesamt, anzahlA1Gesetzt, anzahlA1NichtGesetzt, anzahlA2Gesetzt, anzahlA2NichtGesetzt, anzahlA3Gesetzt, anzahlA3NichtGesetzt);
  }

}
