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

import java.io.OutputStream;
import java.util.List;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.datei.entity.Datei;
import de.ivu.elect.business.datei.entity.DateiFileNames;
import de.ivu.elect.business.ergebnis.control.NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.exchange.control.FileKonfiguration;
import de.ivu.elect.business.exchange.control.MappingException;
import de.ivu.elect.business.exchange.entity.DateiExportArt;
import de.ivu.elect.business.stimmeingabe.control.Eml510bImportiertExportExchange;
import de.ivu.elect.business.wahl.control.NlExportArtefaktNachSystemExportstatusExportObject;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;


import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;

public class DefaultEml510bImportiertExportExchange implements Eml510bImportiertExportExchange {

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

  @Inject
  private transient NlStimmeingabenImportiertZipExportMapper exportMapper;

  public DefaultEml510bImportiertExportExchange() {
    super();
  }

  @Override
  public List<FileFormat> getSupportedFileFormats(NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext context) {
    if (exportMapper.isAcceptContext(context)) {
      return singletonList(NlStimmeingabenImportiertZipExportMapper.FILE_FORMAT);
    }
    return emptyList();
  }

  @Override
  public void addProperties(FormBuilder formBuilder, FileFormat fileFormat, NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext context, Datei datei) {
    try {
      exportMapper.addProperties(formBuilder, context, datei);
    } catch (Exception e) {
      LOG.warn("Properties: " + e.getMessage() + ", " + fileFormat + ", " + context);
    }
  }

  @Override
  public void export(NlExportArtefaktNachSystemExportstatusExportObject object, OutputStream os, FileKonfiguration fileKonfiguration,
                     NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext context) throws MappingException {
    exportMapper.serialize(object, os, context, fileKonfiguration);
  }

  @Override
  public DateiFileNames getDateiFileNames(DateiExportArt dateiExportArt, FileFormat fileFormat, NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext context) {
    return exportMapper.getDateiExportFileNames(dateiExportArt, context);
  }
}
