
package de.ivu.elect.dokumente.ergebnis;

import java.util.Collection;
import java.util.HashSet;

import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.boundary.GesamtErgebnisDokumentContext;
import de.ivu.elect.business.ergebnis.boundary.GesamtErgebnisDokumentGenerator;
import de.ivu.elect.business.ergebnis.control.NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.gebietsbaum.boundary.WahldurchfuehrungsgebietDAO;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.dokumente.konverter.AbstractDokumentGeneratorDocumentMapper;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.ergebnis.dokumente.gesamtergebnis.NlDefaultGesamtErgebnisDokumentKonverter;

public class NlWasErgebnisdokumentNachGebietErgebniseingabestatusByGesamtErgebnisDokumentGeneratorDocumentMapper
    extends
      AbstractDokumentGeneratorDocumentMapper<NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext, Ergebnis, GesamtErgebnisDokumentContext> {

  @Inject
  private transient WahldurchfuehrungsgebietDAO wahldurchfuehrungsgebietDAO;

  @Inject
  private transient GesamtErgebnisDokumentGenerator gesamtErgebnisDokumentGenerator;

  public NlWasErgebnisdokumentNachGebietErgebniseingabestatusByGesamtErgebnisDokumentGeneratorDocumentMapper() {
    super();
  }

  @Override
  protected boolean isConvertDokumentSupported(NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext context) {
    return true; // ELECT-10670, generierte Dateien wiederverwenden...
  }

  @Override
  protected String createContextParameterKey(NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext context, GesamtErgebnisDokumentContext dokumentContext, FileFormat fileFormat) {
    String parameterKeyPrefix = super.createContextParameterKey(context, dokumentContext, fileFormat);

    Wahl wahl = dokumentContext.getWahl();
    Collection<Wahldurchfuehrungsgebiet> gebiete = new HashSet<>();

    if (wahl != null) {
      gebiete.addAll(gesamtErgebnisDokumentGenerator.attachGebiete(dokumentContext, wahldurchfuehrungsgebietDAO.findByWahl(wahl)));
    }

    return NlDefaultGesamtErgebnisDokumentKonverter.createContextParameterKey(parameterKeyPrefix, gebiete);
  }

  @Override
  protected GesamtErgebnisDokumentGenerator getDokumentGenerator() {
    return gesamtErgebnisDokumentGenerator;
  }

  @Override
  public void addProperties(FormBuilder formBuilder, NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext context) {
    // Do nothing...
  }
}
