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

import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase;
import static org.apache.commons.lang3.StringUtils.isNoneBlank;

import javax.annotation.Nullable;

import de.ivu.elect.business.wahl.entity.CommonWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahlart;
import de.ivu.elect.business.wahl.entity.WahlartSitzberechnungsalgorithmus;

public interface WahlartTemplate {

  // aka Schluessel
  String getWahlartName();

  // aka Bezeichnung
  default String getWahlartTitel() {
    return getWahlartName();
  }

  CommonWahlart getCommonWahlart();

  @Nullable
  default String getKurzname() {
    return null;
  }

  @Nullable
  default String getKennzeichen() {
    return null;
  }

  default Long getAnzahlStimmzettel() {
    return 1L;
  }

  WahlartSitzberechnungsalgorithmus getSitzberechnungsalgorithmus();

  default boolean equalsWahlart(Wahl wahl) {
    return wahl != null && equalsWahlart(wahl.getWahlart());
  }

  default boolean equalsWahlart(Wahlart wahlart) {
    return wahlart != null && wahlart.equalsWahlartName(getWahlartName());
  }

  default boolean equalsWahlartName(String another) {
    return equalsWahlartName(getWahlartName(), another);
  }

  static boolean equalsWahlartName(String one, String another) {
    return isNoneBlank(one, another) && equalsIgnoreCase(CommonWahlart.normalizeWahlartName(one), CommonWahlart.normalizeWahlartName(another));
  }
}
