
package de.ivu.elect.dokumente.kandidatur.statistik;

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

/**
 * Dient als Dispatcher für die WahlbewerberStatistik.
 *
 *  on 09.11.2016.
 */
public enum KandidaturArtFilter {
  DIREKT {

    @Override
    public long getAnzahlKandidaturenInGebietshierarchie(Gebiet gebiet, GeschlechtFilter geschlecht,
        ParteiFilter parteienFilter, WahlbewerberStatistik wahlbewerberStatistik) {
      return wahlbewerberStatistik.getAnzahlDirektkandidaturenInGebietshierarchie(gebiet, geschlecht, parteienFilter);
    }
  },

  LISTE {

    @Override
    public long getAnzahlKandidaturenInGebietshierarchie(Gebiet gebiet, GeschlechtFilter geschlecht,
        ParteiFilter parteienFilter, WahlbewerberStatistik wahlbewerberStatistik) {
      return wahlbewerberStatistik.getAnzahlListenkandidaturenInGebietshierarchie(gebiet, geschlecht, parteienFilter);
    }
  },

  ERSATZ {

    @Override
    public long getAnzahlKandidaturenInGebietshierarchie(Gebiet gebiet, GeschlechtFilter geschlecht,
        ParteiFilter parteienFilter, WahlbewerberStatistik wahlbewerberStatistik) {
      return wahlbewerberStatistik.getAnzahlErsatzkandidaturenInGebietshierarchie(gebiet, geschlecht, parteienFilter);
    }
  },

  INSGESAMT {

    @Override
    public long getAnzahlKandidaturenInGebietshierarchie(Gebiet gebiet, GeschlechtFilter geschlecht,
        ParteiFilter parteienFilter, WahlbewerberStatistik wahlbewerberStatistik) {
      return DIREKT.getAnzahlKandidaturenInGebietshierarchie(gebiet, geschlecht, parteienFilter, wahlbewerberStatistik)
          + LISTE.getAnzahlKandidaturenInGebietshierarchie(gebiet, geschlecht, parteienFilter, wahlbewerberStatistik)
          + ERSATZ.getAnzahlKandidaturenInGebietshierarchie(gebiet, geschlecht, parteienFilter, wahlbewerberStatistik);
    }
  };

  public abstract long getAnzahlKandidaturenInGebietshierarchie(Gebiet gebiet, GeschlechtFilter geschlecht,
      ParteiFilter parteienFilter, WahlbewerberStatistik wahlbewerberStatistik);
}
