
package de.ivu.elect.business.personenpruefung.control.wahlrecht;

import static java.util.Collections.emptyList;

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

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.kriterium.AbstractWahlrechtGebietsartInReferenzGebietKriterium;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.kriterium.HoechstalterAmStichtagKriterium;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.kriterium.MindestalterAmStichtagKriterium;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.kriterium.MindestaufenthaltAnAnschriftArtInGebietAmStichtagKriterium;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.kriterium.PersonenregisterAbgleichbarkeitKriterium;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.kriterium.WahlrechtsausschlussKriterium;

public class PersonendatenWahlrechtMatcherResolver implements Serializable {

  private static final long serialVersionUID = 1L;

  protected static final AbstractPersonendatenWahlrechtMatcher NO_OP_MATCHER = new AbstractPersonendatenWahlrechtMatcher() {

    private static final long serialVersionUID = 1L;

    @Override
    public List<MindestalterAmStichtagKriterium> collectMindestalterAmStichtagKriterien(Personendaten personendaten) {
      return emptyList();
    }

    @Override
    public List<HoechstalterAmStichtagKriterium> collectHoechstalterAmStichtagKriterien(Personendaten personendaten) {
      return emptyList();
    }

    @Override
    public List<WahlrechtsausschlussKriterium> collectWahlrechtsausschlussKriterien(Personendaten personendaten) {
      return emptyList();
    }

    @Override
    public PersonenregisterAbgleichbarkeitKriterium collectPersonenregisterAbgleichbarkeitKriterium(Personendaten personendaten) {
      return new PersonenregisterAbgleichbarkeitKriterium(getDefaultPersonendatenClasses(),
          WahlrechtPersonenregisterAbgleichbarkeit.IRRELEVANT);
    }

    @Override
    public List<MindestaufenthaltAnAnschriftArtInGebietAmStichtagKriterium> collectMindestaufenthaltAnAnschriftArtInGebietAmStichtagKriterien(
        Personendaten personendaten) {
      return emptyList();
    }

    @Override
    public List< ? extends AbstractWahlrechtGebietsartInReferenzGebietKriterium> collectWahlrechtGebietsartInReferenzGebietKriterien(
        Personendaten personendaten) {
      return emptyList();
    }
  };

  public AbstractPersonendatenWahlrechtMatcher getMatcher(Personendaten personendaten) {
    return NO_OP_MATCHER;
  }
}
