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

import static java.util.Objects.requireNonNull;

import java.util.Collection;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.control.AbstractPersonendatenMatcherKriterium;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.WahlrechtPersonenregisterAbgleichbarkeit;
import de.ivu.elect.jee.faces.Messages;

public class PersonenregisterAbgleichbarkeitKriterium extends AbstractPersonendatenMatcherKriterium {

  private static final long serialVersionUID = 1L;

  private final WahlrechtPersonenregisterAbgleichbarkeit wahlrechtPersonenregisterAbgleichbarkeit;

  public PersonenregisterAbgleichbarkeitKriterium(Collection<Class< ? extends Personendaten>> personendatenClasses,
      WahlrechtPersonenregisterAbgleichbarkeit wahlrechtPersonenregisterAbgleichbarkeit) {
    super(personendatenClasses);

    requireNonNull(wahlrechtPersonenregisterAbgleichbarkeit, "WahlrechtPersonenregisterAbgleichbarkeit darf nicht null sein");

    this.wahlrechtPersonenregisterAbgleichbarkeit = wahlrechtPersonenregisterAbgleichbarkeit;
  }

  public WahlrechtPersonenregisterAbgleichbarkeit getWahlrechtPersonenregisterAbgleichbarkeit() {
    return wahlrechtPersonenregisterAbgleichbarkeit;
  }

  @Override
  protected boolean matchesInternal(Personendaten personendaten) {
    if (WahlrechtPersonenregisterAbgleichbarkeit.ABGLEICHBAR.equals(getWahlrechtPersonenregisterAbgleichbarkeit())) {
      return Boolean.FALSE.equals(personendaten.getAuswaertig());
    }

    if (WahlrechtPersonenregisterAbgleichbarkeit.NICHT_ABGLEICHBAR.equals(getWahlrechtPersonenregisterAbgleichbarkeit())) {
      return Boolean.TRUE.equals(personendaten.getAuswaertig());
    }

    return true;
  }

  @Override
  public String getDescription(Messages messages) {
    return messages.getMessageForMessageKey(getDescriptionMsgKey(), messages.lokalisiere(getWahlrechtPersonenregisterAbgleichbarkeit()));
  }

  @Override
  public String toString() {
    return getClass().getSimpleName() + " [personenregisterAbgleichbarkeit = " + getWahlrechtPersonenregisterAbgleichbarkeit() + "]";
  }
}
