
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 {

  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.

  private static final long serialVersionUID = 1L;

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

  public boolean isErster() {
    return ERSTE_POSITION.equals(getRang());
  }

  /**
   * Modifiziert ein Gewaehlt-Objekt so, dass es anzeigt, dass das Ergebnis von einem Losentscheid abhängt.
   */
  public void setToLosentscheidOffen() {
    setGewaehltStatus(GewaehltStatus.LOS_OFFEN);
    setRang(0L);
    CustomData cd = getCustomData();
    if (cd instanceof GewaehltCustomData) {
      GewaehltCustomData customData = (GewaehltCustomData) cd;
      customData.setToLosentscheidOffen();
    }
  }

  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();
  }

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