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

import java.util.HashMap;
import java.util.Map;

import de.ivu.elect.business.ergebnis.entity.Stimmenart;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;
import de.ivu.elect.business.hochrechnung.entity.GebietDaten;
import de.ivu.elect.business.hochrechnung.entity.GebietDatenWahlbeteiligung;
import de.ivu.elect.business.hochrechnung.entity.ParteiStimmen;
import de.ivu.elect.business.hochrechnung.entity.ReferendumFrage;
import de.ivu.elect.business.hochrechnung.entity.WahlteilnehmerAnzahl;

public class StimmenHochrechnerHilfsfunktionen {
  public static double notNull (Double x) {
    return x != null? x : 0;
  }
  public static long notNull (Long x) {
    return x != null? x : 0;
  }

  public static GebietDaten<Long> getEmptyGebietDaten(Gebiet gebiet) {
    return new GebietDaten<Long>() {
      @Override
      public Gebiet getGebiet() {
        return gebiet;
      }

      @Override
      public WahlteilnehmerAnzahl getAnzahlWahlberechtigteImGebiet() {
        return new WahlteilnehmerAnzahl();
      }

      @Override
      public WahlteilnehmerAnzahl getAnzahlWaehlerImGebiet() {
        return new WahlteilnehmerAnzahl();
      }

      @Override
      public GebietDatenWahlbeteiligung getWahlbeteiligung() {
        return new GebietDatenWahlbeteiligung();
      }

      @Override
      public Map<Stimmenart, Long> getGueltige() {
        return new HashMap<>();
      }

      @Override
      public Map<Stimmenart, Long> getUngueltige() {
        return new HashMap<>();
      }

      @Override
      public boolean isErgebnisVorhanden() {
        return false;
      }

      @Override
      public Map<PolitischeGruppe, ParteiStimmen<Long>> getParteiStimmen() {
        return new HashMap<>();
      }

      @Override
      public Map<Gruppe, ReferendumFrage<Long>> getReferendumFragen() {
        return new HashMap<>();
      }
    };
  }

  public static GebietDaten<Long> getEmptyGebietDaten(GebietDaten<? extends Number> gebietDaten) {
    return new GebietDaten<Long>() {
      @Override
      public Gebiet getGebiet() {
        return gebietDaten != null? gebietDaten.getGebiet() : null;
      }

      @Override
      public WahlteilnehmerAnzahl getAnzahlWahlberechtigteImGebiet() {
        return new WahlteilnehmerAnzahl();
      }

      @Override
      public WahlteilnehmerAnzahl getAnzahlWaehlerImGebiet() {
        return new WahlteilnehmerAnzahl();
      }

      @Override
      public GebietDatenWahlbeteiligung getWahlbeteiligung() {
        return new GebietDatenWahlbeteiligung();
      }

      @Override
      public Map<Stimmenart, Long> getGueltige() {
        return new HashMap<>();
      }

      @Override
      public Map<Stimmenart, Long> getUngueltige() {
        return new HashMap<>();
      }

      @Override
      public boolean isErgebnisVorhanden() {
        return false;
      }

      @Override
      public Map<PolitischeGruppe, ParteiStimmen<Long>> getParteiStimmen() {
        return new HashMap<>();
      }

      @Override
      public Map<Gruppe, ReferendumFrage<Long>> getReferendumFragen() {
        return new HashMap<>();
      }
    };
  }
}
