package de.ivu.elect.was.exchange.wahl;

import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.system.boundary.SystemLogWriter;
import de.ivu.elect.business.system.entity.SystemLogQuelle;
import de.ivu.elect.business.wahl.boundary.WahlExporter;
import de.ivu.elect.business.wahl.boundary.WahldurchfuehrungDAO;
import de.ivu.elect.business.wahl.control.WahlExportContext;
import de.ivu.elect.business.wahl.entity.*;
import de.ivu.elect.core.exchange.mapper.WahlInternExternMapper;
import de.ivu.elect.jee.faces.Messages;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.ejb.Stateless;
import javax.inject.Inject;
import java.io.File;
import java.io.Serializable;

@Stateless
public class AutomatischerWahlExport implements Serializable {

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

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahldurchfuehrungDAO wahldurchfuehrungDAO;

  @Inject
  private transient WahlParameterLoader wahlParameterLoader;

  @Inject
  private transient SystemLogWriter systemLogWriter;

  @Inject
  private transient Messages messages;

  @Inject
  private transient WahlExporter wahlExporter;


  public void export(WahlPK wahlPK) {

    Wahldurchfuehrung wahldurchfuehrung = wahldurchfuehrungDAO.findByPrimaryKey(wahlPK);

    String pfad = wahlParameterLoader.resolveStringValue(wahldurchfuehrung, WahlParameterWerte.WAHLEXPORT_PFAD);

    if (StringUtils.isBlank(pfad)) {
      systemLogWriter.writeWarnLogMessageFuerMandant(wahldurchfuehrung, messages.getMessageForMessageKey("automatischer.wahl.export.kein.export.verzeichnis.angegeben"), SystemLogQuelle.WAHL_EXPORT);
    } else {
      File verzeichnis = new File(pfad);
      if (verzeichnis.isDirectory()) {
        LOG.info("Automatischer Wahlexport: " + wahldurchfuehrung);
        exportiere(wahldurchfuehrung, verzeichnis);
        systemLogWriter.writeInfoLogMessageFuerMandant(wahldurchfuehrung.getMandant(),messages.getMessageForMessageKey("automatischer.wahl.export.erfolgreich", wahldurchfuehrung.getName()) ,SystemLogQuelle.WAHL_EXPORT );
      } else {
        systemLogWriter.writeErrorLogMessageFuerMandant(wahldurchfuehrung, messages.getMessageForMessageKey("automatischer.wahl.export.kein.gueltiges.export.verzeichnis.angegeben", pfad, wahldurchfuehrung.getName()), SystemLogQuelle.WAHL_EXPORT);
      }
    }
  }

  public void exportiere(Wahl wahl, File verzeichnis) {
    WahlExportContext context = new WahlExportContext(wahl);
    context.setPostExportTargetDirectory(verzeichnis);
    wahlExporter.export(new FileFormat(WahlInternExternMapper.FORMAT_NAME, FileType.ZIP), context, wahl.getMandant(), wahl, wahl.getWahltermin());
  }


}

