
package de.ivu.elect.business.sitzberechnung.entity;

import java.util.EnumSet;
import java.util.stream.Stream;

import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.jee.faces.Messages;

public enum OsvLegacyArtikelnummer {

  UNBEKANNT(-1),

  P7(7),
  P8(8),
  P9(9),
  P10(10),
  P12(12),
  P13(13),
  P15(15),
  P16(16),
  P18(18)

  ;

  private final int artikelnummer;

  OsvLegacyArtikelnummer(int artikelnummer) {
    this.artikelnummer = artikelnummer;
  }

  public int getArtikelnummer() {
    return artikelnummer;
  }

  public String getKuerzel(Wahl wahl) {
    return formatKuerzel(wahl, this, artikelnummer);
  }

  public String getReferenzGesetzestext(Wahl wahl) {
    return "artikel " + getKuerzel(wahl);
  }

  public String getBeschreibung(Wahl wahl, Messages messages, String beteiligteEntitaeten, String gelosteEntitaet) {
    String msgKey = "nl.dokument.p22.konflikt.beschreibung";

    if (!UNBEKANNT.equals(this)) {
      msgKey += ".p" + getArtikelnummer();
    }

    return messages.getMessageForMessageKey(msgKey, getReferenzGesetzestext(wahl), beteiligteEntitaeten, gelosteEntitaet);
  }

  public static OsvLegacyArtikelnummer findeArtikelnummer(int artikelnummer) {
    return Stream.of(values()).filter(a -> a.getArtikelnummer() == artikelnummer).findAny().orElse(UNBEKANNT);
  }

  private static String formatKuerzel(Wahl wahl, OsvLegacyArtikelnummer osvLegacyArtikelnummer, int nummer) {
    String letter = "P";

    if (NlWahlart.EERSTE_KAMER.equalsWahlart(wahl) && EnumSet.of(P9, P10 /*,P11 */, P12, P13).contains(osvLegacyArtikelnummer)) { // ELECT-13592, ELECT-13651
      letter = "U";
    }

    return letter + " " + nummer;
  }
}
