package de.ivu.elect.wus.exchange.stimmzettel;

import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.business.exchange.control.MappingException;
import de.ivu.elect.business.gebietsbaum.boundary.WahlverwaltungGebietInformation;
import de.ivu.elect.business.stimmzettel.control.StimmzettelExportContext;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelDaten;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;

import javax.annotation.Nullable;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipOutputStream;

public interface SimpleStimmzettelForZipExportMapper {

  void serialize(OutputStream os, StimmzettelExportContext context, String fileFormatName, WahlverwaltungGebietInformation auswertungsgebietInformation,
                 List<Map.Entry<WahlverwaltungGebietInformation, StimmzettelDaten>> stimmzettelDatenPerStimmzettelgebiet, boolean closeOutputStream) throws MappingException;

  void includeResources(ZipOutputStream zos, StimmzettelExportContext context) throws IOException;

  void addProperties(FormBuilder formBuilder, StimmzettelExportContext context);

  @Nullable  // Cf. AbstractStimmzettelExportMapper#FILE_TYPE_CONFIGURABLE...
  FileType getFileType();

  FileType getTargetFileType(StimmzettelExportContext context);

  boolean isAcceptContext(StimmzettelExportContext context);

  boolean isAcceptStimmzettelDaten(WahlverwaltungGebietInformation stimmzettelgebietInformation, StimmzettelDaten stimmzettelDaten);
}
