
package de.ivu.elect.business.stimmeingabe.control.plausi;

import static java.util.Arrays.asList;

import de.ivu.elect.business.ergebnis.entity.Stimmenart;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp;

public interface StimmeingabePlausiNachStimmenart {

  static StimmeingabeAnzahlReference findStimmeingabeGueltigeStimmenReference(StimmeingabePlausiTyp typ) {
    if (asList(//
        StimmeingabePlausiTyp.GUELTIGE_DIREKTSTIMMEN_ANZAHL_GROESSER_NULL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GROESSER_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.GUELTIGE_DIREKTSTIMMEN_ANZAHL_GLEICH_GRUPPE_DIREKTSTIMMEN_ANZAHLEN_SUMME //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_GUELTIGE_DIREKTSTIMMEN;
    }

    if (asList(//
        StimmeingabePlausiTyp.GUELTIGE_LISTENSTIMMEN_ANZAHL_GROESSER_NULL, //
        StimmeingabePlausiTyp.GUELTIGE_LISTENSTIMMEN_ANZAHL_GLEICH_GRUPPE_LISTENSTIMMEN_ANZAHLEN_SUMME, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GROESSER_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_LISTENSTIMMEN_ZWISCHENSUMME_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.GUELTIGE_LISTENSTIMMEN_ANZAHL_GLEICH_LISTENKANDIDATUR_LISTENSTIMMEN_ANZAHLEN_SUMME //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_GUELTIGE_LISTENSTIMMEN;
    }

    if (asList(//
        StimmeingabePlausiTyp.GUELTIGE_LISTENSTIMMEN_ABZUZIEHEN_ANZAHL_GLEICH_GRUPPE_LISTENSTIMMEN_ABZUZIEHEN_ANZAHLEN_SUMME //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_GUELTIGE_LISTENSTIMMEN_ABZUZIEHEN;
    }

    if (asList(//
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_LISTENSTIMMEN_ZWISCHENSUMME_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_GUELTIGE_LISTENSTIMMEN_ZWISCHENSUMME;
    }

    if (asList(//
        StimmeingabePlausiTyp.GUELTIGE_REFERENDUM_STIMMEN_ANZAHL_GROESSER_NULL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_REFERENDUM_STIMMEN_ANZAHL_PLUS_UNGUELTIGE_REFERENDUM_STIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.GUELTIGE_REFERENDUM_STIMMEN_ANZAHL_GLEICH_REFERENDUM_OPTION_REFERENDUM_STIMMEN_ANZAHLEN_SUMME //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.REFERENDUM_VORLAGE_REFERENDUM_STIMMEN_ZWISCHENSUMME_GUELTIGE;
    }

    return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_GUELTIGE_STIMMEN;
  }

  static StimmeingabeAnzahlReference findStimmeingabeUngueltigeStimmenReference(StimmeingabePlausiTyp typ) {
    if (asList(//
        StimmeingabePlausiTyp.UNGUELTIGE_DIREKTSTIMMEN_ANZAHL_KLEINER_GLEICH_WAEHLER_GESAMT_ANZAHL, //
        StimmeingabePlausiTyp.UNGUELTIGE_DIREKTSTIMMEN_ANZAHL_KLEINER_WAEHLER_GESAMT_ANZAHL_ANTEIL, //
        StimmeingabePlausiTyp.UNGUELTIGE_DIREKTSTIMMEN_ANZAHL_KLEINER_GLEICH_WAEHLER_GESAMT_ANZAHL_ANTEIL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GROESSER_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_UNGUELTIGE_DIREKTSTIMMEN;
    }

    if (asList(//
        StimmeingabePlausiTyp.UNGUELTIGE_LISTENSTIMMEN_ANZAHL_KLEINER_GLEICH_WAEHLER_GESAMT_ANZAHL_ANTEIL, //
        StimmeingabePlausiTyp.UNGUELTIGE_LISTENSTIMMEN_ANZAHL_KLEINER_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_ANTEIL, //
        StimmeingabePlausiTyp.UNGUELTIGE_LISTENSTIMMEN_ANZAHL_KLEINER_WAEHLER_GESAMT_ANZAHL_ANTEIL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GROESSER_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_LISTENSTIMMEN_ZWISCHENSUMME_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_LISTENSTIMMEN_ZWISCHENSUMME_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_UNGUELTIGE_LISTENSTIMMEN;
    }

    if (asList(//
    // StimmeingabePlausiTyp. //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_UNGUELTIGE_LISTENSTIMMEN_ABZUZIEHEN;
    }

    if (asList(//
        StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_REFERENDUM_STIMMEN_ANZAHL_PLUS_UNGUELTIGE_REFERENDUM_STIMMEN_ANZAHL //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.REFERENDUM_VORLAGE_REFERENDUM_STIMMEN_ZWISCHENSUMME_UNGUELTIGE;
    }

    return StimmeingabeAnzahlReference.SYSTEM_GRUPPE_UNGUELTIGE_STIMMEN;
  }

  static StimmeingabeAnzahlReference findStimmeingabeGruppeStimmenReference(StimmeingabePlausiTyp typ) {
    if (asList(//
        StimmeingabePlausiTyp.GUELTIGE_DIREKTSTIMMEN_ANZAHL_GLEICH_GRUPPE_DIREKTSTIMMEN_ANZAHLEN_SUMME //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.GRUPPE_DIREKTSTIMMEN;
    }

    if (asList(//
        StimmeingabePlausiTyp.GUELTIGE_LISTENSTIMMEN_ANZAHL_GLEICH_GRUPPE_LISTENSTIMMEN_ANZAHLEN_SUMME //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.GRUPPE_LISTENSTIMMEN;
    }

    if (asList(//
        StimmeingabePlausiTyp.GUELTIGE_LISTENSTIMMEN_ABZUZIEHEN_ANZAHL_GLEICH_GRUPPE_LISTENSTIMMEN_ABZUZIEHEN_ANZAHLEN_SUMME //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.GRUPPE_LISTENSTIMMEN_ABZUZIEHEN;
    }

    if (asList(//
        StimmeingabePlausiTyp.GUELTIGE_REFERENDUM_STIMMEN_ANZAHL_GLEICH_REFERENDUM_OPTION_REFERENDUM_STIMMEN_ANZAHLEN_SUMME //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.GRUPPE_REFERENDUM_STIMMEN;
    }

    return StimmeingabeAnzahlReference.GRUPPE_STIMMEN;
  }

  static StimmeingabeAnzahlReference findMucLandtagswahlZwischensummenEingabeWaehlerStimmenReference(StimmeingabePlausiTyp typ) {
    if (asList(//
        StimmeingabePlausiTyp.WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME_GLEICH_WAEHLER_GESAMT_ANZAHL, //
        StimmeingabePlausiTyp.WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME_GROESSER_WAEHLER_GESAMT_ANZAHL_ANTEIL_STUFE_1, //
        StimmeingabePlausiTyp.WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME_GROESSER_WAEHLER_GESAMT_ANZAHL_ANTEIL_STUFE_2, //
        StimmeingabePlausiTyp.WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME_KLEINER_GLEICH_WAEHLER_GESAMT_ANZAHL //
    ).contains(typ)) {
      return StimmeingabeAnzahlReference.BY_LANDTAGSWAHL_SYSTEM_GRUPPE_WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME;
    }

    return StimmeingabeAnzahlReference.BY_LANDTAGSWAHL_SYSTEM_GRUPPE_WAEHLER_LISTENSTIMMEN_ZWISCHENSUMME;
  }

  static StimmeingabeAnzahlReference findMucLandtagswahlZwischensummenEingabeWaehlerStimmenReference(Stimmenart stimmenart) {
    if (Stimmenart.DIREKTSTIMME.equals(stimmenart)) {
      return StimmeingabeAnzahlReference.BY_LANDTAGSWAHL_SYSTEM_GRUPPE_WAEHLER_DIREKTSTIMMEN_ZWISCHENSUMME;
    }

    return StimmeingabeAnzahlReference.BY_LANDTAGSWAHL_SYSTEM_GRUPPE_WAEHLER_LISTENSTIMMEN_ZWISCHENSUMME;
  }
}
