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

import static java.util.Arrays.stream;
import static java.util.stream.Collectors.toSet;

import java.util.Collection;
import java.util.EnumSet;
import java.util.function.Predicate;

public enum StimmeingabePlausiGebietsart {

  UNBEKANNT,

  URNENWAHLBEZIRK,
  URNENWAHLBEZIRK_SONDERSTIMMBEZIRK,

  BRIEFWAHLBEZIRK,
  BRIEFWAHLBEZIRK_SONDERSTIMMBEZIRK;

  private StimmeingabePlausiGebietsart() {
  }

  public boolean isUnbekannt() {
    return UNBEKANNT.equals(this);
  }

  public boolean isUrnenwahlbezirk() {
    return EnumSet.of(URNENWAHLBEZIRK, URNENWAHLBEZIRK_SONDERSTIMMBEZIRK).contains(this);
  }

  public boolean isBriefwahlbezirk() {
    return EnumSet.of(BRIEFWAHLBEZIRK, BRIEFWAHLBEZIRK_SONDERSTIMMBEZIRK).contains(this);
  }

  public boolean isSonderstimmbezirk() {
    return EnumSet.of(URNENWAHLBEZIRK_SONDERSTIMMBEZIRK, BRIEFWAHLBEZIRK_SONDERSTIMMBEZIRK).contains(this);
  }

  public static Collection<StimmeingabePlausiGebietsart> valuesMatching(Predicate<StimmeingabePlausiGebietsart> filter) {
    return stream(StimmeingabePlausiGebietsart.values()).filter(filter).collect(toSet());
  }
}
