
package de.ivu.elect.dokumente.wahlvorschlag;

import javax.inject.Inject;

import de.ivu.elect.business.dokumente.control.DokumentExtraFileOutput;
import de.ivu.elect.business.dokumente.entity.DokumentVorlageArt;
import de.ivu.elect.business.gebietsbaum.boundary.GebietDAO;
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.boundary.WahlvorschlaegeDokumentContext;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagDAO;
import de.ivu.elect.business.wahlvorschlag.control.WahlvorschlaegeDokumentGeneratorWahlrechtspruefungenFinder;
import de.ivu.elect.business.wahlvorschlag.control.WahlvorschlagMaengelDokumentKonverter;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.business.wahlvorschlagsperson.boundary.WahlvorschlagsPersonDAO;
import de.ivu.elect.dokumente.CoreElectContext;
import de.ivu.elect.dokumente.CoreElectContextBuilder;
import de.ivu.elect.dokumente.kandidatur.KandidaturCoreDaten;
import de.ivu.elect.dokumente.konverter.AbstractListDokumentKonverter;

public class DefaultWahlvorschlagMaengelDokumentKonverter extends AbstractListDokumentKonverter<Wahlvorschlag, WahlvorschlaegeDokumentContext> implements WahlvorschlagMaengelDokumentKonverter {

  @Inject
  private transient GebietDAO gebietDAO;

  @Inject
  private transient WahlvorschlagDAO wahlvorschlagDAO;

  @Inject
  private transient WahlvorschlagsPersonDAO wahlvorschlagsPersonDAO;

  @Inject
  private transient WahlausschussmitgliedDAO wahlausschussmitgliedDAO;

  @Inject
  private transient EntityAufStimmzettelDatenDAOFactory entityAufStimmzettelDatenDAOFactory;

  @Inject
  private transient CoreElectContextBuilder coreElectContextBuilder;

  @Inject
  private transient WahlvorschlaegeDokumentGeneratorWahlrechtspruefungenFinder wahlvorschlaegeDokumentGeneratorWahlrechtspruefungenFinder;

  public DefaultWahlvorschlagMaengelDokumentKonverter() {
    super();
  }

  @Override
  public DokumentVorlageArt getDokumentVorlageArt() {
    return DokumentVorlageArt.WAHLVORSCHLAG_MAENGEL;
  }

  @Override
  protected Object konvertiere(Wahlvorschlag wahlvorschlag, WahlvorschlaegeDokumentContext context, DokumentExtraFileOutput dokumentExtraFileOutput) {
    CoreElectContext coreElectContext = coreElectContextBuilder.create(createBaseElectContext(context, dokumentExtraFileOutput));

    KandidaturCoreDaten kandidaturCoreDaten = new KandidaturCoreDaten(coreElectContext, entityAufStimmzettelDatenDAOFactory.getEntityAufStimmzettelDaten(), context.getKandidaturFormatDarstellung());

    WahlvorschlagCoreDaten wahlvorschlagCoreDaten = new WahlvorschlagCoreDaten(attach(context.getWahl()), wahlvorschlagDAO, kandidaturCoreDaten, wahlvorschlagsPersonDAO, wahlausschussmitgliedDAO,
        wahlvorschlaegeDokumentGeneratorWahlrechtspruefungenFinder, context);

    Gebiet auswertungsgebiet = gebietDAO.attach(context.getGebiet());

    return WahlvorschlagsdatenDocument.lookupOrCreate(coreElectContext, auswertungsgebiet, wahlvorschlagCoreDaten, wahlvorschlag, 1L);
  }
}
