
package de.ivu.elect.was.exchange.ergebnis.eml;

import javax.inject.Inject;

import de.ivu.elect.business.CurrentCustomer;
import de.ivu.elect.business.ergebnis.control.ErgebnisExportContext;
import de.ivu.elect.business.ergebnis.control.ErgebnisExportObject;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.nl.eml.readable.ManagingAuthorityWrapper;
import de.ivu.elect.nl.eml.readable.ReportingUnitVotesWrapper;

public class Eml510dCSBEmptyErgebnisExportMapper extends Abstract510EmptyErgebnisExportMapper {

  private static final long serialVersionUID = 1L;

  public static final FileFormat FILE_FORMAT = new FileFormat("eml.510d.empty.file.format", FILE_FORMAT_TYPE);

  @Inject
  private transient CurrentCustomer currentCustomer;

  public Eml510dCSBEmptyErgebnisExportMapper() {
    super();
  }

  @Override
  protected String getEmlId() {
    return "510d";
  }

  @Override
  public FileFormat getFileFormat() {
    return FILE_FORMAT;
  }

  @Override
  protected boolean exportsTotaaltelling() {
    return true; // ELECTVAPP-585
  }

  @Override
  protected boolean isPsbNotwendig() {
    return false;
  }

  @Override
  protected boolean isHsbNotwendig() {
    return false;
  }

  @Override
  protected boolean isCsbNotwendig() {
    return true;
  }


  @Override
  protected String getAuthorityIdPrefix(ErgebnisExportObject ergebnisExportObject) {
    if (!NlWahlart.isWasPSB(ergebnisExportObject.getErgebnisDaten().getWahl(),currentCustomer.getCustomer() )) {
      return "CSB"; // eine 510d eine GR enthält nicht(!) CSB
    }
    return "";
  }

  @Override
  protected String createdByAuthorityIdPrefix(ErgebnisExportObject ergebnisExportObject) {
    return "";
  }

  @Override
  protected void fillReportingUnit(Wahldurchfuehrungsgebiet reportingUnitGebiet, ReportingUnitVotesWrapper reportingUnitVotesWrapper) {
    super.fillReportingUnit(reportingUnitGebiet, reportingUnitVotesWrapper);

    reportingUnitVotesWrapper.setId(getMessage("eml510d.reporting.unit.id", reportingUnitGebiet.getNummer()));
  }
}
