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

import java.io.File;
import java.util.List;

import de.ivu.elect.business.ergebnis.boundary.AbstractErgebnisDAO;
import de.ivu.elect.business.mandant.entity.EntityMitMandant;
import de.ivu.elect.business.wahl.entity.Wahl;

public abstract class AbstractErgebnis implements ErgebnisBase, EntityMitMandant {

  private static final long serialVersionUID = 1L;

  public static final Long EINGANGSSEQUENZNUMMER_NICHT_VERGEBEN = -2L;

  public static final Long EINGANGSSEQUENZNUMMER_BERECHNUNG_UND_UEBERNAHME_AUTOMATISCH_ERZWUNGEN = EINGANGSSEQUENZNUMMER_NICHT_VERGEBEN - 1;

  public AbstractErgebnis() {
    super();
  }

  public static Ergebnis getErgebnisZurWahlNachErgebnisart(Ergebnisart ergebnisart, Wahl wahl, AbstractErgebnisDAO ergebnisDAO) {
    List<Ergebnis> ergebnisse = ergebnisDAO.findByWahlAndErgebnisart(wahl, ergebnisart);
    if (ergebnisse.isEmpty()) {
      return null;
    }
    if (ergebnisse.size() > 1) {
      throw new IllegalStateException("Mehr als ein Ergebnis für die Art: " + ergebnisart + " vorhanden, Wahl: " + wahl + ", ergebnisse= "
          + ergebnisse);
    }
    return ergebnisse.get(0);
  }

  public boolean isStatusUnbekannt() {
    return ErgebnisStatus.UNBEKANNT.equals(getErgebnisStatus());
  }

  public boolean isEndgueltig() {
    return getErgebnisart().isEndgueltig();
  }

  public boolean isVorlaeufig() {
    return getErgebnisart().isVorlaeufig();
  }

  public String getErgebnisartPathMitWahlnameFilesystemKompatibel() {
    return getWahl().getDatumWahlartId() + File.separator + getErgebnisart().name().toLowerCase();
  }

  @Override
  public EntityMitMandant getParent() {
    return getWahl();
  }
}
