
package de.ivu.elect.business.ergebnis.entity;

import java.util.List;

import de.ivu.elect.business.ergebnis.boundary.AbstractSitzeDAO;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

public abstract class AbstractSitze extends AbstractMitGruppeUndGebiet implements SitzeBase {

  private static final long serialVersionUID = 1L;

  public AbstractSitze() {
    super();
  }

  public Sitze getSitzeVorperiode(Wahl wahl, AbstractSitzeDAO abstractSitzeDAO) {
    return getSitzeVorperiode(wahl, getGebiet(), abstractSitzeDAO);
  }

  protected Sitze getSitzeVorperiode(Wahl wahl, Gebiet gebiet, AbstractSitzeDAO abstractSitzeDAO) {
    List<Sitze> sitzeVorperiode = abstractSitzeDAO.findByGruppeGebietErgebnisartAndWahl(getGruppe(), gebiet, Ergebnisart.VORPERIODE, wahl);

    if (sitzeVorperiode.isEmpty()) {
      return null;
    }
    return sitzeVorperiode.get(0);
  }

  public boolean existiertWahlvorschlag(List<Wahlvorschlag> wahlvorschlaege) {
    return wahlvorschlaege.stream().anyMatch(wahlvorschlag -> wahlvorschlag.getGruppe().equals(getGruppe()) && wahlvorschlag.getGebiet().equals(getGebiet()));
  }
}
