
package de.ivu.elect.dokumente.gebiet;

import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.stimmzettel.boundary.EntityAufStimmzettelDatenDAOFactory;
import de.ivu.elect.business.wahlausschuss.boundary.WahlausschussmitgliedDAO;
import de.ivu.elect.business.wahlvorschlag.control.WahlvorschlaegeDokumentGeneratorWahlrechtspruefungenFinder;
import de.ivu.elect.business.wahlvorschlagsperson.boundary.WahlvorschlagsPersonDAO;
import de.ivu.elect.dokumente.BaseElectContext;
import de.ivu.elect.dokumente.CoreElectContext;
import de.ivu.elect.dokumente.CoreElectContextBuilder;
import de.ivu.elect.dokumente.kandidatur.KandidaturCoreDaten;
import de.ivu.elect.dokumente.wahlvorschlag.WahlvorschlagCoreDaten;

@Specializes
public class NlCoreGebietCustomDataDocumentBuilder extends GebietCustomDataDocumentBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlvorschlagsPersonDAO wahlvorschlagsPersonDAO;

  @Inject
  private transient WahlausschussmitgliedDAO wahlausschussmitgliedDAO;

  @Inject
  private transient EntityAufStimmzettelDatenDAOFactory entityAufStimmzettelDatenDAOFactory;

  @Inject
  private transient WahlvorschlaegeDokumentGeneratorWahlrechtspruefungenFinder wahlvorschlaegeDokumentGeneratorWahlrechtspruefungenFinder;

  @Inject
  private transient CoreElectContextBuilder coreElectContextBuilder;

  public NlCoreGebietCustomDataDocumentBuilder() {
    super();
  }

  @Override
  public GebietCustomDataDocument createCustomData(BaseElectContext baseElectContext, Gebiet gebiet) {
    return createCustomData(coreElectContextBuilder.create(baseElectContext), gebiet);
  }

  protected GebietCustomDataDocument createCustomData(CoreElectContext coreElectContext, Gebiet gebiet) {
    return new NlCoreGebietCustomDataDocument(coreElectContext, gebiet);
  }

  public WahlvorschlagCoreDaten createWahlvorschlagCoreDaten(CoreElectContext coreElectContext) {
    return new WahlvorschlagCoreDaten(coreElectContext.getWahl(), coreElectContext.getWahlvorschlagDAO(),
        new KandidaturCoreDaten(coreElectContext, entityAufStimmzettelDatenDAOFactory.getEntityAufStimmzettelDaten()), wahlvorschlagsPersonDAO, wahlausschussmitgliedDAO,
        wahlvorschlaegeDokumentGeneratorWahlrechtspruefungenFinder, coreElectContext);
  }
}
