
package de.ivu.elect.sitzberechnung.osv.exchange.p22;

public enum BesonderheitBeiNominierungDerGewaehltenTyp {

  /**
   * "Kandidat {0} wurde für mehr als eine Partei gewählt."
   */
  Result_User_MultipleElectedCandidate_0 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return false; // KEIN explizites Mapping in P22DokumentMapper UND shallBePublishedInModelP22 == false!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#candidateElectedForMultipleP3Lists!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_MultipleElectedCandidate_0";
    }
  },

  /**
   * "Kandidat(in) {0} behält den Sitz, den er/sie für Liste {1} erhalten hat, die im Wahlkreis {2} eingereicht wurde."
   */
  Result_User_MultipleElectedCandidate_0_KeepsSeatFor_1_In_2 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return false; // KEIN explizites Mapping in P22DokumentMapper UND shallBePublishedInModelP22 == false!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#multipleElectedCandidateKeepsSeat!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_MultipleElectedCandidate_0_KeepsSeatFor_1_In_2";
    }
  },

  /**
   * "Kandidat(in) {0} verliert den Sitz, den er/sie für Liste {1} erhalten hat, die im Wahlkreis {2} eingereicht wurde."
   */
  Result_User_MultipleElectedCandidate_0_LoosesSeatFor_1_In_2 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return false; // KEIN explizites Mapping in P22DokumentMapper UND shallBePublishedInModelP22 == false!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#multipleElectedCandidateLoosesSeat!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_MultipleElectedCandidate_0_LoosesSeatFor_1_In_2";
    }
  },

  /**
   * "Kandidat(in) {0} verliert den Sitz, den er/sie für Liste {1} erhalten hat, die im Wahlkreis {2} eingereicht wurde."
   */
  Result_User_NoSuccessorFoundForMultipleElectedCandidate_0_For_1_In_2 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return false; // KEIN explizites Mapping in P22DokumentMapper UND shallBePublishedInModelP22 == false!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#multipleElectedCandidateNoSuccessorFound!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_NoSuccessorFoundForMultipleElectedCandidate_0_For_1_In_2";
    }
  },

  /**
   * "Kandidat {0} erhielt einen Sitz auf der Liste {1}, die im Wahlkreis {2} eingereicht wurde. Er wird Nachfolger eines anderen Kandidaten, der für mehr als eine Partei gewählt wurde."
   */
  Result_User_Successor_0_ForMultipleElectedCandidateFor_1_In_2 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return false; // KEIN explizites Mapping in P22DokumentMapper UND shallBePublishedInModelP22 == false!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#multipleElectedCandidateSuccessorFound!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_Successor_0_ForMultipleElectedCandidateFor_1_In_2";
    }
  },

  /**
   * "Kandidat {0} auf der Liste {1} sollte einen Sitz auf der Liste erhalten, die im Wahlkreis {2} eingereicht wurde, aber alle Sitze dieser Liste sind bereits vergeben."
   *
   * Paramter sind: Kandidat (0), P3-Liste = politische Gruppe (1), Wahlkreis einer Liste oder Wahlkreise eines Stels (2)
   */
  Result_User_Candidate_0_For_1_in_2_DoesNotReceiveSeatInPreferredDistrict {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerAnomalyToBePublishedInP22!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return true; // AnomalyFactory#candidateDoesNotReceiveSeatInPreferredDistrict
    }

    @Override
    public String toMsgKey() {
      return "Result_User_Candidate_0_For_1_in_2_DoesNotReceiveSeatInPreferredDistrict";
    }
  },

  /**
   * "Gemäß Artikel P 16 Abschnitt 2 erhält Kandidat {0} der Liste {1} einen Sitz auf der Liste, die im Wahlkreis {2} eingereicht wurde, obwohl dort kein Sitz mehr zu vergeben war."
   *
   * Paramter sind: Kandidat (0), P3-Liste = politische Gruppe (1), Wahlkreis einer Liste oder Wahlkreise eines Stels (2)
   */
  Result_User_Candidate_0_ReceivesSeatByP16Sub2For_1In_2 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerAnomalyToBePublishedInP22!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return true; // AnomalyFactory#candidateReceiveSeatInDistrictWithoutFreeSeat!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_Candidate_0_ReceivesSeatByP16Sub2For_1In_2";
    }
  },

  /**
   * "Gemäß Artikel P 16 Absatz 2 wird ein Sitz der Liste {0} einbehalten, die im Wahlkreis {1} eingereicht wurde."
   *
   * Paramter sind: P3-Liste = politische Gruppe (0), Wahlkreis einer Liste oder Wahlkreise eines Stels (1)
   */
  Result_User_SeatWithheldFor_0_In_1_ByP16Sub2 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerAnomalyToBePublishedInP22!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return true; // AnomalyFactory#seatWithheldFromRollBackSequence!!!;
    }

    @Override
    public String toMsgKey() {
      return "Result_User_SeatWithheldFor_0_In_1_ByP16Sub2";
    }
  },

  /**
   * "Gemäß Artikel P 16 Absatz 2 wurden auf der Liste {0} nicht zugewiesene Sitze aller Listen einbehalten, die in vorherigen Zuweisungen Sitze erhielten. Um Artikel 16 Absatz 2 weiter anzuwenden,
   * wird ein Sitz der Liste einbehalten, die in dem Wahlkreis mit der niedrigsten Nummer ({1}) eingereicht wurde."
   *
   * Paramter sind: P3-Liste = politische Gruppe (0), Wahlkreis einer Liste oder Wahlkreise eines Stels (1)
   */
  Result_User_RollBackSequenceExhaustedFor_0_SeatWithheldIn_1 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerAnomalyToBePublishedInP22!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return true; // AnomalyFactory#rollBackSequenceExhaustedSeatWithheldFrom!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_RollBackSequenceExhaustedFor_0_SeatWithheldIn_1";
    }
  },

  /**
   * "Bei der Vergabe der Sitze an die Kandidaten der Liste {0} gemäß Artikel P 16, war die im Wahlkreis {1} eingereichte Liste erschöpft. Der nicht zugewiesene Sitz wird an die Liste übertragen, die
   * im Wahlbezirk {2} eingereicht wurde, indem die verbleibenden Sitze gemäß den Artikeln P12 und P13 weiterverteilt werden."
   *
   * Paramter sind: P3-Liste = politische Gruppe (0), Wahlkreis einer Liste oder Wahlkreise eines Stels (1), Wahlkreis einer anderen Liste oder Wahlkreise eines anderen Stels (2)
   */
  Result_User_LateListExhaustionFor_0_In_1_SeatPassesTo_2 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerAnomalyToBePublishedInP22!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return true; // AnomalyFactory#lateListExhaustion!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_LateListExhaustionFor_0_In_1_SeatPassesTo_2";
    }
  },

  /**
   * "Gemäß Artikel P 9 (Regelung zur absoluten Mehrheit) wird der Liste {0} ein zusätzlicher Sitz zugeteilt. Ein Sitz der Liste {1} wird dafür einbehalten."
   */
  Result_User_List_0_HasAbsoluteMajorityOfVotesAndReceivesSeatFromList_1 {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitMehrheitssicherungsklausel!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#absoluteMajority!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_List_0_HasAbsoluteMajorityOfVotesAndReceivesSeatFromList_1";
    }
  },

  /**
   * "Gemäß Artikel P 10 oder P 13 Absatz 1 (Listenerschöpfung) wird einer der an die Liste {0} zugeteilten Sitze auf eine andere Liste übertragen."
   */
  Result_User_ListExhaustionFor_0_SeatLostToOtherList {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#OBERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#listExhaustionToOtherList -> NOT EK!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionFor_0_SeatLostToOtherList";
    }
  },

  /**
   * "Gemäß Artikel P 10 oder P 13 Absatz 1 (Listenerschöpfung) werden {1} der an die Liste {0} zugeteilten Sitze auf andere Listen übertragen."
   */
  Result_User_ListExhaustionFor_0_1_SeatsLostToOtherList {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#OBERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#listExhaustionToOtherList -> NOT EK!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionFor_0_1_SeatsLostToOtherList";
    }
  },

  /**
   * ELECT-13651 -> Artikel U 10
   *
   * "Gemäß Artikel U 10 (Listenerschöpfung) wird einer der an die Liste {0} zugeteilten Sitze auf eine andere Liste übertragen."
   */
  Result_User_ListExhaustionEKFor_0_SeatLostToOtherList {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#OBERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#listExhaustionToOtherList -> ONLY EK!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionEKFor_0_SeatLostToOtherList";
    }
  },

  /**
   * ELECT-13651 -> Artikel U 10
   *
   * "Gemäß Artikel U 10 (Listenerschöpfung) werden {1} der an die Liste {0} zugeteilten Sitze auf andere Listen übertragen."
   */
  Result_User_ListExhaustionEKFor_0_1_SeatsLostToOtherList {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#OBERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // AnomalyFactory#listExhaustionToOtherList -> ONLY EK!!!
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionEKFor_0_1_SeatsLostToOtherList";
    }
  },

  /**
   * "Gemäß Artikel P 10 oder P 13 Absatz 1 (Listenerschöpfung) wird innerhalb Gruppe {1} einer der an die Liste {0} zugeteilten Sitze auf eine andere Liste übertragen."
   */
  Result_User_ListExhaustionFor_0_1_SeatLostToOtherListInGroup {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#UNTERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // NICHT in AnomalyFactory verwendet...
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionFor_0_1_SeatLostToOtherListInGroup";
    }
  },

  /**
   * "Gemäß Artikel P 10 oder P 13 Absatz 1 (Listenerschöpfung) werden innerhalb Gruppe {2} {1} der an die Liste {0} zugeteilten Sitze auf andere Listen übertragen."
   */
  Result_User_ListExhaustionFor_0_1_2_SeatsLostToOtherListInGroup {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#UNTERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // NICHT in AnomalyFactory verwendet...
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionFor_0_1_2_SeatsLostToOtherListInGroup";
    }
  },

  /**
   * ELECT-13651 -> Artikel U 13 Absatz 1
   *
   * "Gemäß Artikel U 13 Absatz 1 (Listenerschöpfung) wird innerhalb Gruppe {1} einer der an die Liste {0} zugeteilten Sitze auf eine andere Liste übertragen."
   */
  Result_User_ListExhaustionEKFor_0_1_SeatLostToOtherListInGroup {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#UNTERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // NICHT in AnomalyFactory verwendet...
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionEKFor_0_1_SeatLostToOtherListInGroup";
    }
  },

  /**
   * ELECT-13651 -> Artikel U 13 Absatz 1
   *
   * "Gemäß Artikel U 13 Absatz 1 (Listenerschöpfung) werden innerhalb Gruppe {2} {1} der an die Liste {0} zugeteilten Sitze auf andere Listen übertragen."
   */
  Result_User_ListExhaustionEKFor_0_1_2_SeatsLostToOtherListInGroup {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#UNTERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // NICHT in AnomalyFactory verwendet...
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionEKFor_0_1_2_SeatsLostToOtherListInGroup";
    }
  },

  /**
   * "Overeenkomstig artikel P 10 of artikel P 13, eerste lid, van de Kieswet (lijstuitputting) vindt er binnen partij {1} een overgang plaats van een zetel van stel {0} naar een ander lijst."
   */
  Result_User_ListExhaustionFor_0_1_SeatLostToOtherListInGroup_stel {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#UNTERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // NICHT in AnomalyFactory verwendet...
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionFor_0_1_SeatLostToOtherListInGroup_stel";
    }
  },

  /**
   * "Overeenkomstig artikel P 10 of artikel P 13, eerste lid, van de Kieswet (lijstuitputting) vindt er binnen partij {2} een overgang plaats van {1} zetels van stel {0} naar andere lijsten."
   */
  Result_User_ListExhaustionFor_0_1_2_SeatsLostToOtherListInGroup_stel {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#UNTERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // NICHT in AnomalyFactory verwendet...
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionFor_0_1_2_SeatsLostToOtherListInGroup_stel";
    }
  },

  /**
   * ELECT-13651 -> Artikel U 13 Absatz 1
   *
   * "Overeenkomstig artikel U 13, eerste lid, van de Kieswet (lijstuitputting) vindt er binnen partij {1} een overgang plaats van een zetel van stel {0} naar een ander lijst."
   */
  Result_User_ListExhaustionEKFor_0_1_SeatLostToOtherListInGroup_stel {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#UNTERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // NICHT in AnomalyFactory verwendet...
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionEKFor_0_1_SeatLostToOtherListInGroup_stel";
    }
  },

  /**
   * ELECT-13651 -> Artikel U 13 Absatz 1
   *
   * "Overeenkomstig artikel U 13, eerste lid, van de Kieswet (lijstuitputting) vindt er binnen partij {2} een overgang plaats van {1} zetels van stel {0} naar andere lijsten."
   */
  Result_User_ListExhaustionEKFor_0_1_2_SeatsLostToOtherListInGroup_stel {

    @Override
    public boolean isShallBePublishedInErgebnisLog() {
      return true; // P22DokumentMapper#createErgebnisLogEintragBesonderheitPerListenerschoepfung -> VerteilungTyp#UNTERVERTEILUNG!!!
    }

    @Override
    public boolean isShallBePublishedInModelP22() {
      return false; // NICHT in AnomalyFactory verwendet...
    }

    @Override
    public String toMsgKey() {
      return "Result_User_ListExhaustionEKFor_0_1_2_SeatsLostToOtherListInGroup_stel";
    }
  },

  ;

  BesonderheitBeiNominierungDerGewaehltenTyp() {
  }

  public boolean isShallBePublished() {
    return isShallBePublishedInErgebnisLog() || isShallBePublishedInModelP22();
  }

  public abstract boolean isShallBePublishedInErgebnisLog();

  public abstract boolean isShallBePublishedInModelP22();

  public abstract String toMsgKey();
}
