
package de.ivu.elect.dokumente.ergebnis;

import static java.util.Arrays.asList;

import java.util.Collection;
import java.util.List;

import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.business.ergebnis.boundary.NlWasModelT11BulkExporter;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.security.Customer;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingabestatus;
import de.ivu.elect.business.wahl.control.AbstractNlExportArtefaktNachSystemExportstatusExportContext;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.was.exchange.ergebnis.NlWasModelT11ExportMapper;

public class NlWasModelT11MainDocumentExportMapper extends AbstractNlWasGesamtErgebnisDokumentNachGebietErgebniseingabestatusDocumentExportMapper implements NlWasModelT11ExportMapper {

  public static final String FILE_FORMAT_NAME = "file.format.ergebnisdokument.export.modelt11.main";

  public NlWasModelT11MainDocumentExportMapper() {
    super();
  }

  @Override
  public boolean supportsBulkExportNachSystemExportstatus() {
    return false; // ELECT-13502
  }

  @Override // https://support.elect-it.com/wiki/x/48g8
  protected Collection<NlWahlart> collectWahlartenAccepted() {
    return asList( //
        NlWahlart.EERSTE_KAMER //
    );
  }

  @Override // https://support.elect-it.com/wiki/x/48g8
  protected boolean isAcceptWahlebene(Wahl wahl, Customer customer) {
    return NlWahlart.isWasPSB(wahl, customer);
  }

  @Override
  protected Collection<Ergebniseingabestatus> collectErgebniseingabestatusAccepted() {
    return NlWasModelT11BulkExporter.EXPORT_ERGEBNISEINGABESTATUS;
  }

  @Override
  public String getFileFormatName() {
    return FILE_FORMAT_NAME;
  }

  @Override
  protected FileType getFileFormatFileType() {
    return FileType.ZIP; // ELECT-13502, ODT per Provinz...
  }

  @Override
  public boolean requiresTargetFilesInSeparateBulkExportEntry(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return context.isDateiExportNachSchrittImWahlprozess(); // ELECT-13502, generierte ZIP-Datei nur beim Bulk-Export über das Menü (in äußere ZIP-Datei) entpacken...
  }

  @Override
  public List<FileType> getTargetFileTypes(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return asList(getFileFormatFileType());
  }

  @Override
  protected String getDokumentVorlageNameInfix() {
    return "Model T 11";
  }

  @Override
  protected List<Gebiet> collectDokumentGebiete(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return attachListenwahlgebiete(context); // ELECT-13502, ODT per Provinz...
  }

  /*
   * https://support.elect-it.com/wiki/x/XoE8
   */

  @Override
  public boolean requiresWahlbehoerdeWahlleiterName(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlbehoerdeAnschriftStrasseHausnummer(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlbehoerdeAnschriftOrt(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlbehoerdeAnschriftPlz(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlbehoerdeDokumentErstelltAnschriftStrasseHausnummer(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlbehoerdeDokumentErstelltAnschriftOrt(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlbehoerdeDokumentErstelltAnschriftPlz(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlbehoerdeDokumentErstelltAm(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresGewaehltesGremiumAnschriftStrasseHausnummer(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresGewaehltesGremiumAnschriftOrt(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresGewaehltesGremiumAnschriftPlz(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlausschusssitzungAnschriftStrasseHausnummer(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlausschusssitzungAnschriftOrt(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlausschusssitzungAnschriftPlz(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlausschusssitzungBeginn(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return true;
  }

  @Override
  public boolean requiresWahlausschusssitzungEnde(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlausschusssitzungEinwaende(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }

  @Override
  public boolean requiresWahlausschusssitzungEinwaendeBemerkungen(AbstractNlExportArtefaktNachSystemExportstatusExportContext context) {
    return false;
  }
}
