
package de.ivu.elect.core.exchange.stimmen.csv.dynamic;

import de.ivu.elect.business.ergebnis.control.ErgebnisDaten;
import de.ivu.elect.business.ergebnis.control.ErgebnisExportContext;
import de.ivu.elect.business.gebietsbaum.boundary.WahlverwaltungGebietInformationResolver;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.control.ListenwahlStimmeingabeKonfiguration;
import de.ivu.elect.business.wahl.entity.Wahl;

public class DefaultDynamicStimmenCsvExportMapper extends AbstractDynamicStimmenCsvExportMapper<DefaultDynamicStimmenExportDTOFactory> {

  private static final long serialVersionUID = 1L;

  private static final String FORMAT_NAME = "file.format.stimmen.ergebins.exchange.dynamic.default";

  public DefaultDynamicStimmenCsvExportMapper() {
    super();
  }

  @Override
  public boolean isAcceptContext(ErgebnisExportContext context) {
    Wahl wahl = context.getWahl();

    return wahl != null && (wahl.isReferendum() || wahl.isWahlMitDirektkandidatengebieten() || wahl.isWahlMitListengebieten()); // ELECT-11886
  }

  @Override
  protected String getFileFormatName() {
    return FORMAT_NAME;
  }

  @Override
  protected boolean isAusbleibdendeGebieteExportieren(ErgebnisExportContext context) {
    return true; // ELECTKOM-1770
  }

  @Override
  protected DefaultDynamicStimmenExportDTOFactory createDtoFactory(ErgebnisDaten ergebnisDaten, Wahldurchfuehrungsgebiet wurzelgebiet, ErgebnisExportContext context,
      WahlverwaltungGebietInformationResolver wahlverwaltungGebietInformationResolver, ListenwahlStimmeingabeKonfiguration listenwahlStimmeingabeKonfiguration) {
    return new DefaultDynamicStimmenExportDTOFactory(wurzelgebiet, new DynamicStimmenExchangeErgebnisDatenWrapper(ergebnisDaten), listenwahlStimmeingabeKonfiguration,
        wahlverwaltungGebietInformationResolver, isAusbleibdendeGebieteExportieren(context));
  }
}
