
package de.ivu.elect.dokumente.kandidatur;

import javax.annotation.Nullable;

import de.ivu.elect.business.kandidatur.control.StimmzettelFormatterKandidaturFormatDarstellung;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.pruefung.boundary.ZulassungPruefer;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.dokumente.CoreElectContext;

public class KandidaturCoreDaten {

  private final EntityAufStimmzettelDaten entityAufStimmzettelDaten;

  private final StimmzettelFormatterKandidaturFormatDarstellung kandidaturFormatDarstellung;

  private final KandidaturCustomDataDocumentBuilder kandidaturCustomDataDocumentBuilder;

  public KandidaturCoreDaten(CoreElectContext coreElectContext, EntityAufStimmzettelDaten entityAufStimmzettelDaten) {
    this(coreElectContext, entityAufStimmzettelDaten, null);
  }

  public KandidaturCoreDaten(CoreElectContext coreElectContext, EntityAufStimmzettelDaten entityAufStimmzettelDaten, StimmzettelFormatterKandidaturFormatDarstellung kandidaturFormatDarstellung) {
    this(entityAufStimmzettelDaten, coreElectContext.getCustomDataDocumentBuilder().getKandidaturCustomDataDocumentBuilder(), kandidaturFormatDarstellung);
  }

  private KandidaturCoreDaten(EntityAufStimmzettelDaten entityAufStimmzettelDaten, KandidaturCustomDataDocumentBuilder kandidaturCustomDataDocumentBuilder,
      StimmzettelFormatterKandidaturFormatDarstellung kandidaturFormatDarstellung) {
    super();

    this.entityAufStimmzettelDaten = entityAufStimmzettelDaten;

    this.kandidaturFormatDarstellung = kandidaturFormatDarstellung;
    this.kandidaturCustomDataDocumentBuilder = kandidaturCustomDataDocumentBuilder;
  }

  public EntityAufStimmzettelDaten getEntityAufStimmzettelDaten() {
    return entityAufStimmzettelDaten;
  }

  public ZulassungPruefer getZulassungPruefer() {
    return getEntityAufStimmzettelDaten().getZulassungPruefer();
  }

  @Nullable
  public StimmzettelFormatterKandidaturFormatDarstellung getKandidaturFormatDarstellung() {
    return kandidaturFormatDarstellung;
  }

  public Object getKandidaturCustomData(Kandidatur kandidatur) {
    return getKandidaturCustomDataDocumentBuilder().createCustomData(kandidatur);
  }

  private KandidaturCustomDataDocumentBuilder getKandidaturCustomDataDocumentBuilder() {
    return kandidaturCustomDataDocumentBuilder;
  }
}
