
package de.ivu.elect.business.stimmen.boundary;

import static org.apache.commons.lang3.StringUtils.replace;

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.security.Customer;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahlart;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.faces.UserLocale;

@Specializes
public class NlStimmeLabelMessages extends StimmeLabelMessages {

  private static final long serialVersionUID = 1L;

  public static final String DEFAULT_LISTENWAHL = "DEFAULT_LISTENWAHL";

  public NlStimmeLabelMessages() {
    super();
  }

  public NlStimmeLabelMessages(UserLocale userLocale, Messages messages) {
    super(userLocale, messages);
  }

  public String replaceKennungenNbsb(String value) {
    String result = value;

    // A, B, C im NBSB NICHT vorhanden...
    result = replace(result, " (A)", "");
    result = replace(result, " (B)", "");
    result = replace(result, " (C)", "");
    result = replace(result, " (A, B, C)", "");

    // Alle weiteren Kennungen (ab D) "rücken auf"...
    result = replace(result, "(D)", "(A)");
    result = replace(result, "(D, ", "(A, ");
    result = replace(result, "(E)", "(B)");
    result = replace(result, "(F)", "(C)");
    result = replace(result, "(G)", "(D)");
    result = replace(result, "(H)", "(E)");
    result = replace(result, ", H)", ", E)");
    result = replace(result, "(I)", "(F)");
    result = replace(result, "(J)", "(G)");

    return result;
  }

  @Override
  public String normalizeWahlartName(Wahlart wahlart) {
    if (NlWahlart.EERSTE_KAMER.equalsWahlart(wahlart)) { // ELECT-9890
      return NlWahlart.EERSTE_KAMER.name();
    }

    if (NlWahlart.isListenwahl(wahlart)) {
      return DEFAULT_LISTENWAHL;
    }

    return super.normalizeWahlartName(wahlart);
  }

  @Override // Cf. https://support.elect-it.com/ticket/browse/ELECT-9630?focusedCommentId=1029965&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-1029965
  public String normalizeWahlebene(Gebiet gebiet) {
    if (gebiet != null) {
      Wahl wahl = gebiet.getWahl();

      if (wahl != null) {
        if (NlWahlart.isNBSB(wahl) || NlWahlart.isNBSBC(wahl)) {
          return "NBSB"; // ELECT-16524
        }

        return normalizeWahlebene(wahl.getWahlart());
      }
    }

    return super.normalizeWahlebene(gebiet);
  }

  @Override
  public String normalizeWahlebene(Wahlart wahlart) {

    /*
     * NOTE, dass GSB vor HSB vor CSB gilt!
     */

    if (NlWahlart.isWasGSB(wahlart, Customer.NL_WAS)) {
      return NlWahlart.KUERZEL_WAHLEBENE_GSB;
    }

    if (NlWahlart.isWasHSB(wahlart, Customer.NL_WAS)) {
      return NlWahlart.KUERZEL_WAHLEBENE_HSB;
    }

    if (NlWahlart.isWasCSB(wahlart, Customer.NL_WAS)) {
      return NlWahlart.KUERZEL_WAHLEBENE_CSB;
    }

    return super.normalizeWahlebene(wahlart);
  }
}
