
package de.ivu.elect.business.stimmeingabe.control.plausi;

import java.io.Serializable;
import java.util.Optional;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiGebietsart;

public class StimmeingabePlausiGebietsartResolver implements Serializable {

  private static final long serialVersionUID = 1L;

  public StimmeingabePlausiGebietsartResolver() {
    super();
  }

  public Optional<StimmeingabePlausiGebietsart> findStimmeingabePlausiGebietsart(Gebiet wahldurchfuehrungsgebiet) {
    if (wahldurchfuehrungsgebiet.isUrnenwahlgebiet()) {
      return getStimmeingabePlausiGebietsartUrnenwahlbezirk(wahldurchfuehrungsgebiet);
    }

    if (wahldurchfuehrungsgebiet.isBriefwahlgebiet()) {
      return getStimmeingabePlausiGebietsartBriefwahlbezirk(wahldurchfuehrungsgebiet);
    }

    return Optional.empty();
  }

  protected Optional<StimmeingabePlausiGebietsart> getStimmeingabePlausiGebietsartUrnenwahlbezirk(Gebiet wahldurchfuehrungsgebiet) {
    if (Boolean.TRUE.equals(wahldurchfuehrungsgebiet.getSonderstimmbezirk())) {
      return Optional.of(StimmeingabePlausiGebietsart.URNENWAHLBEZIRK_SONDERSTIMMBEZIRK);
    }

    return Optional.of(StimmeingabePlausiGebietsart.URNENWAHLBEZIRK);
  }

  protected Optional<StimmeingabePlausiGebietsart> getStimmeingabePlausiGebietsartBriefwahlbezirk(Gebiet wahldurchfuehrungsgebiet) {
    if (Boolean.TRUE.equals(wahldurchfuehrungsgebiet.getSonderstimmbezirk())) {
      return Optional.of(StimmeingabePlausiGebietsart.BRIEFWAHLBEZIRK_SONDERSTIMMBEZIRK);
    }

    return Optional.of(StimmeingabePlausiGebietsart.BRIEFWAHLBEZIRK);
  }
}
