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

import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.stimmzettel.entity.AbstractEntityAufStimmzettelStimmzettelPosition;

public class WahlvorschlagStimmzettelPosition extends AbstractEntityAufStimmzettelStimmzettelPosition {

  public static final WahlvorschlagStimmzettelPosition EMPTY = new WahlvorschlagStimmzettelPosition(new WahlvorschlagPK(), POSITION_EMPTY, POSITION_EMPTY,
      POSITION_EMPTY, POSITION_EMPTY,
      WahlvorschlagStimmzettelPositionFormatter.EMPTY);

  private final WahlvorschlagStimmzettelPositionFormatter formatter;

  public WahlvorschlagStimmzettelPosition(WahlvorschlagPK wahlvorschlagPK, GruppeImGebiet gruppeImGebiet, Long berechnetePosition, WahlvorschlagStimmzettelPositionFormatter formatter) {
    this(wahlvorschlagPK, gruppeImGebiet.getEingereichtePosition(), gruppeImGebiet.getVorgegebenePosition(), gruppeImGebiet.getRelativePosition(),
        berechnetePosition, formatter);
  }

  public WahlvorschlagStimmzettelPosition(WahlvorschlagPK wahlvorschlagPK, Long eingereichtePosition, Long vorgegebenPosition, Long relativePosition, Long berechnetePosition,
                                          WahlvorschlagStimmzettelPositionFormatter formatter) {
    super(wahlvorschlagPK, eingereichtePosition, vorgegebenPosition, relativePosition, berechnetePosition);

    this.formatter = formatter;
  }

  @Override
  public boolean hasPosition() {
    return super.hasPosition() && !this.equals(EMPTY);
  }

  public String formatPositionVorgegeben() {
    return getFormatter().formatPositionVorgegeben(getPositionVorgegeben());
  }

  public String formatPosition() {
    return getFormatter().formatPosition(getPosition());
  }

  public String formatKennzahl() {
    return getFormatter().formatKennzahl(getPosition());
  }

  public String formatKennzahlAufStimmzettel() {
    return getFormatter().formatKennzahlAufStimmzettel(getPosition());
  }

  public boolean isWaehlerBenannteWahlvorschlaegeErfassbar() {
    return getFormatter().isWaehlerBenannteWahlvorschlaegeErfassbar();
  }

  private WahlvorschlagStimmzettelPositionFormatter getFormatter() {
    return formatter;
  }
}
