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

import org.apache.commons.lang3.StringUtils;

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.ReportingUnitVotesWrapper;
import de.ivu.elect.presentation.ergebnis.exchange.Eml510bEmptyErgebnisExportDescription;

public class Eml510bPSBEmptyErgebnisExportMapper extends Abstract510EmptyErgebnisExportMapper {

  private static final long serialVersionUID = 1L;

  public static final FileFormat FILE_FORMAT = new FileFormat(Eml510bEmptyErgebnisExportDescription.FILE_FORMAT_NAME, FILE_FORMAT_TYPE);

  public Eml510bPSBEmptyErgebnisExportMapper() {
    super();
  }

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

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

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

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

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

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

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

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

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

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

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

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

  @Override
  protected void fillReportingUnit(Wahldurchfuehrungsgebiet reportingUnitGebiet, ReportingUnitVotesWrapper reportingUnitVotesWrapper) {
    // ELECTVAPP-491 und ELECT-13760 und ELECT-13807
    NlWahlart nlWahlart = NlWahlart.valueOf(reportingUnitGebiet.getWahl());
    reportingUnitVotesWrapper
        .setId(getMessage(nlWahlart.getEml510bIdMessageKey(), reportingUnitGebiet.getNummer(), nlGebietDarstellungNummerFormatter.formatiereNummer(reportingUnitGebiet.getUebergeordnetesGebiet())));

    if (nlWahlart.isEml510bNameAusgaben()) {
      if (StringUtils.isBlank(reportingUnitGebiet.getAnschrift().getPlz())) {
        reportingUnitVotesWrapper.setName(getMessage("eml510b.reporting.unit.name.stimmbuero.ohne.plz", reportingUnitGebiet.getName()));
      } else {
        reportingUnitVotesWrapper.setName(getMessage("eml510b.reporting.unit.name.stimmbuero", reportingUnitGebiet.getName(), reportingUnitGebiet.getAnschrift().getPlz()));
      }
    }
  }
}
