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

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettel;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStimmzettelPosition;
import de.ivu.elect.jee.entity.customdata.CustomData;

public abstract class AbstractDirektkandidatur extends Kandidatur implements DirektkandidaturBase, EntityAufStimmzettel {

  private static final long serialVersionUID = 1L;

  public AbstractDirektkandidatur() {
    super();
  }

  public AbstractDirektkandidatur(CustomData customData) {
    super(customData);
  }

  public boolean hasDirektkandidat() {
    return getDirektkandidat() != null;
  }

  @Override
  public Wahlvorschlag getWahlvorschlag() {
    return getDirektkandidat();
  }

  @Override
  public boolean isDirektkandidatur() {
    return true;
  }

  @Override
  public Direktkandidatur getDirektkandidatur() {
    return (Direktkandidatur) this;
  }

  @Override
  protected void postSetKandidaturStatus(KandidaturStatus alterWert, KandidaturStatus neuerWert) {
    if (neuerWert != null && wertHatSichGeaendert(alterWert, neuerWert) && hasDirektkandidat()) {
      getDirektkandidat().setWahlvorschlagStatus(neuerWert.toWahlvorschlagStatus());
    }
  }

  public WahlvorschlagStimmzettelPosition getStimmzettelPosition(EntityAufStimmzettelDaten entityAufStimmzettelDaten) {
    return getStimmzettelPosition(getGebiet(), entityAufStimmzettelDaten);
  }

  @Override
  public WahlvorschlagStimmzettelPosition getStimmzettelPosition(Gebiet gebiet, EntityAufStimmzettelDaten entityAufStimmzettelDaten) {
    if (hasDirektkandidat()) {
      return getDirektkandidat().getStimmzettelPosition(entityAufStimmzettelDaten);
    }

    return WahlvorschlagStimmzettelPosition.EMPTY;
  }
}
