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

import java.util.List;

import javax.annotation.Nullable;

import de.ivu.elect.business.ergebnis.boundary.AbstractSitzeDAO;
import de.ivu.elect.business.gebietsbaum.entity.EntityMitGebietVeraenderbar;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.wahl.entity.Wahl;

public abstract class AbstractSitze extends AbstractMitGruppeUndGebiet implements SitzeBase, EntityMitGebietVeraenderbar {

  private static final long serialVersionUID = 1L;

  protected AbstractSitze() {
    super();
  }

  @Nullable
  public Wahl getWahl() {
    Gebiet gebiet = getGebiet();

    if (gebiet != null && gebiet.getWahl() != null) {
      return gebiet.getWahl();
    }

    Gruppe gruppe = getGruppe();

    if (gruppe != null && gruppe.getWahl() != null) {
      return gruppe.getWahl();
    }

    return null;
  }

  @Nullable
  public Sitze getSitzeVorperiode(Wahl wahl, AbstractSitzeDAO sitzeDAO) {
    return getSitzeVorperiode(wahl, getGebiet(), sitzeDAO);
  }

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

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

    return sitzeVorperiode.get(0);
  }
}
