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

import static java.util.Collections.emptyList;

import java.io.Serializable;
import java.util.List;

import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.wahlrechtspruefung.entity.Wahlrechtspruefung;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

public interface ZulassungPrueferFactory extends Serializable {

  ZulassungPruefer createZulassungPruefer();

  ZulassungPruefer DEAKTIVIERT_NUR_ZUGELASSENE_WAHLVORSCHLAEGE = new ZulassungPruefer() {

    private static final long serialVersionUID = 1L;

    @Override
    public boolean isZulassenErlaubt(Wahlvorschlag wahlvorschlag) {
      return true;
    }

    @Override
    public List<String> getGruendeFuerVerweigerungDerZulassung(Wahlvorschlag wahlvorschlag) {
      return emptyList();
    }

    @Override
    public String getBegruendungDerZulassungsverweigerung(Wahlvorschlag wahlvorschlag) {
      return "";
    }

    @Override
    public List<Wahlrechtspruefung> collectWahlrechtspruefungen(Wahlvorschlag wahlvorschlag) {
      return emptyList();
    }

    @Override
    public boolean isZulassenErlaubt(Kandidatur kandidatur) {
      return true;
    }

    @Override
    public boolean isZulassenErlaubtUndNichtAbgelehnt(Kandidatur kandidatur) {
      if (kandidatur.isNichtZugelassenImSinneAbgelehnt()) {
        return false;
      }

      return isZulassenErlaubt(kandidatur);
    }

    @Override
    public List<String> getGruendeFuerVerweigerungDerZulassung(Kandidatur kandidatur) {
      return emptyList();
    }

    @Override
    public String getBegruendungDerZulassungsverweigerung(Kandidatur kandidatur) {
      return "";
    }

    @Override
    public List<Wahlrechtspruefung> collectWahlrechtspruefungen(Kandidatur kandidatur) {
      return emptyList();
    }
  };
}
