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

import static java.util.Objects.requireNonNull;

import java.util.Collection;

import de.ivu.elect.business.gebietsbaum.entity.EntityMitGebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.control.AbstractPersonendatenMatcherKriterium;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.WahlrechtGebietsart;
import de.ivu.elect.jee.faces.Messages;

public abstract class AbstractWahlrechtGebietsartInReferenzGebietKriterium extends AbstractPersonendatenMatcherKriterium {

  private static final long serialVersionUID = 1L;

  private final WahlrechtGebietsart wahlrechtGebietsart;

  private final EntityMitGebiet entityMitGebiet;

  private final Gebiet gebiet;

  public AbstractWahlrechtGebietsartInReferenzGebietKriterium(Collection<Class< ? extends Personendaten>> personendatenClasses, WahlrechtGebietsart wahlrechtGebietsart,
      EntityMitGebiet entityMitGebiet) {
    super(personendatenClasses);

    requireNonNull(wahlrechtGebietsart, "WahlrechtGebietsart darf nicht null sein");
    requireNonNull(entityMitGebiet, "EntityMitGebiet darf nicht null sein");
    requireNonNull(entityMitGebiet.getGebiet(), "Gebiet darf nicht null sein");

    this.wahlrechtGebietsart = wahlrechtGebietsart;

    this.entityMitGebiet = entityMitGebiet;
    this.gebiet = this.entityMitGebiet.getGebiet();
  }

  public WahlrechtGebietsart getWahlrechtGebietsart() {
    return wahlrechtGebietsart;
  }

  public EntityMitGebiet getEntityMitGebiet() {
    return entityMitGebiet;
  }

  public Gebiet getGebiet() {
    return gebiet;
  }

  @Override
  public String getDescription(Messages messages) {
    return messages.getMessageForMessageKey(getDescriptionMsgKey(), messages.lokalisiere(getWahlrechtGebietsart()), getGebiet().getName(), getGebiet().getNummer());
  }
}
