
package de.ivu.elect.presentation.ergebnis.exchange;

import static java.util.Arrays.stream;

import de.ivu.elect.business.wahl.boundary.WahlartTemplate;
import de.ivu.elect.business.wahl.entity.CommonWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;

public abstract class AbstractErgebnisdokumentTypExportDescription implements ErgebnisdokumentTypExportDescription {

  private static final long serialVersionUID = 1L;

  public AbstractErgebnisdokumentTypExportDescription() {
    super();
  }

  protected boolean isWahlartNurDirektstimmen(Wahl wahl) {
    return matchesAnyWahlart(wahl, CommonWahlart.BUERGERMEISTERWAHL) || wahl.isWahlMitDirektkandidatengebieten() && !wahl.isWahlMitListengebieten();
  }

  protected boolean isWahlartNurListenstimmen(Wahl wahl) {
    return matchesAnyWahlart(wahl, CommonWahlart.EUROPAWAHL) || !wahl.isWahlMitDirektkandidatengebieten() && wahl.isWahlMitListengebieten();
  }

  protected boolean isWahlartNurReferendumstimmen(Wahl wahl) {
    return wahl.isReferendum();
  }

  private boolean matchesAnyWahlart(Wahl wahl, WahlartTemplate one, WahlartTemplate... more) {
    return one.equalsWahlart(wahl) || stream(more).anyMatch(wahlart -> wahlart.equalsWahlart(wahl));
  }
}
