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

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;
import de.ivu.elect.jee.entity.customdata.CustomData;

public abstract class AbstractGewaehlt implements GewaehltBase {

  private static final long serialVersionUID = 1L;

  public static final long ERSTE_POSITION = 1L; // Definition von erster, um den ersten Kandidaten in einer Menge von gewählten Kandidaten besser bestimmen zu können

  public static final long KEIN_RANG = 0L; // Wert für den Rang, wenn ein Kandidat keinen sinnvollen Rang hat, z.B. weil er nicht zugelassen ist.

  public AbstractGewaehlt() {
    super();
  }

  public Ergebnisart getErgebnisart() {
    return getErgebnis().getErgebnisart();
  }

  public boolean isErster() {
    return getRang() != null && getRang() == ERSTE_POSITION;
  }

  /**
   * Modifiziert ein Gewaehlt-Objekt so, dass es anzeigt, dass das Ergebnis von einem Losentscheid abhängt.
   */
  public void setToLosentscheidOffen() {
    setGewaehltStatus(GewaehltStatus.LOS_OFFEN);
    setRang(KEIN_RANG);

    CustomData customData = getCustomData();

    if (customData instanceof GewaehltCustomData) {
      GewaehltCustomData gewaehltCustomData = (GewaehltCustomData) customData;
      gewaehltCustomData.setToLosentscheidOffen();
    }
  }

  public PolitischeGruppe getGruppe() {
    return getKandidatur().getGruppe();
  }

  public Gebiet getGebiet() {
    return getKandidatur().getGebiet();
  }

  /**
   * getRang() verwenden!
   */
  @Deprecated
  public Long getPosition() {
    return getRang();
  }

  /**
   * setRang() verwenden!
   */
  @Deprecated
  public void setPosition(Long position) {
    setRang(position);
  }

  /**
   * getGewaehltStatus() verwenden!
   */
  @Deprecated
  public Boolean getIstGewaehlt() {
    return getGewaehltStatus().isGewaehlt();
  }
}
