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

import static org.apache.commons.lang3.StringUtils.isNotBlank;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;

import de.ivu.elect.business.gebietsbaum.boundary.WahlverwaltungGebietInformation;

public interface WahlverwaltungGebietInformationArt {

  String toArt();

  /**
   * @return Bspw. "Wahlkreis", "Stimmkreis", "Wahlbereich", ...
   */
  boolean isWahlgebietTeilraum();

  default boolean equalsGebietsart(Gebiet gebiet) {
    return equalsGebietsart(toArt(), gebiet);
  }

  static boolean equalsGebietsart(String gebietsartName, Gebiet gebiet) {
    return gebiet != null && gebiet.getGebietsart() != null && equalsArt(gebietsartName, gebiet.getGebietsart().getName());
  }

  default boolean equalsGebietsgruppierungArt(Gebietsgruppierung gebietsgruppierung) {
    return equalsGebietsgruppierungArt(toArt(), gebietsgruppierung);
  }

  static boolean equalsGebietsgruppierungArt(String gebietsgruppierungArt, Gebietsgruppierung gebietsgruppierung) {
    return gebietsgruppierung != null && equalsArt(gebietsgruppierungArt, gebietsgruppierung.getGebietsgruppierungArt());
  }

  default boolean equalsArt(WahlverwaltungGebietInformation wahlverwaltungGebietInformation) {
    return equalsArt(toArt(), wahlverwaltungGebietInformation);
  }

  static boolean equalsArt(String art, WahlverwaltungGebietInformation wahlverwaltungGebietInformation) {
    return wahlverwaltungGebietInformation != null && equalsArt(art, wahlverwaltungGebietInformation.getArt());
  }

  static boolean equalsArt(String one, String another) {
    return isNotBlank(one) && trimToEmpty(one).equalsIgnoreCase(trimToEmpty(another));
  }
}
