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

import java.util.List;

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

import org.primefaces.model.file.UploadedFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.datei.entity.DateiExportPK;
import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.business.dokumente.control.ProgressMonitor;
import de.ivu.elect.business.dokumente.entity.DokumentVorlage;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.entity.NlWahlParameterWerte;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlParameterLoader;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

@Specializes
@Stateless
public class NlWahlvorschlagEmpfangsquittungDokumentGenerator extends WahlvorschlagEmpfangsquittungDokumentGenerator {

  private static final Logger LOG = LoggerFactory.getLogger(NlWahlvorschlagEmpfangsquittungDokumentGenerator.class);

  @Inject
  private transient WahlDAO wahlDAO;

  @Inject
  private transient WahlParameterLoader wahlParameterLoader;

  public NlWahlvorschlagEmpfangsquittungDokumentGenerator() {
    super();
  }

  @Override
  protected DateiExportPK createDateiExport(List<Wahlvorschlag> entitiesNotAttached, DokumentVorlage dokumentVorlageNotAttached, UploadedFile uploadedFile, FileType zieldateiTyp, Wahl wahlNotAttached,
      Wahltermin wahlterminNotAttached, WahlvorschlagEmpfangsquittungDokumentContext context, ProgressMonitor monitor) {

    /*
     * ELECT-10119, Änderungen an Dokumentparametern, etc. für WahlParameterLoader/Finder sichtbar machen...
     *
     * Bei Anpassungen auch NlExportArtefaktNachSystemExportstatusBulkExporterHelper#aktualisiereWahldaten anpassen!
     */

    Wahl wahl = wahlDAO.attach(context.getWahl());

    for (NlWahlParameterWerte nlWahlParameterWerte : NlWahlParameterWerte.values()) {
      String key = nlWahlParameterWerte.name();

      if (context.containsKey(key)) {
        nlWahlParameterWerte.setValue(context, wahl, wahlParameterLoader, context.get(key, Object.class));
      }
    }

    wahlDAO.persist(wahl);
    wahlDAO.flush();

    LOG.info("Context-Parameter an Wahl und Wahlparametern aktualisiert");

    return super.createDateiExport(entitiesNotAttached, dokumentVorlageNotAttached, uploadedFile, zieldateiTyp, wahlNotAttached, wahlterminNotAttached, context, monitor);
  }
}
