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

import java.util.List;

import javax.annotation.Nullable;
import javax.inject.Inject;

import de.ivu.elect.business.datei.entity.FileType;
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.boundary.NlGebietDarstellungNummerFormatter;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.nl.eml.readable.ReportingUnitVotesWrapper;

public class Eml510cHSBErgebnisExportMapper extends Abstract510ErgebnisExportMapper {

    private static final long serialVersionUID = 1L;

    public static final FileFormat FILE_FORMAT = new FileFormat("eml.510c.file.format", FileType.ZIP);

    @Inject
    private transient NlGebietDarstellungNummerFormatter nlGebietDarstellungNummerFormatter;

    public Eml510cHSBErgebnisExportMapper() {
        super();
    }

    @Override
    protected List<Wahldurchfuehrungsgebiet> bestimmeReportingUnitGebiete(ErgebnisExportObject ergebnisExportObject, ErgebnisExportContext context) {
        return ergebnisExportObject.getErgebnisDaten().getErfassungsgebiete();
    }

    @Nullable
    @Override
    protected Wahldurchfuehrungsgebiet bestimmeTotalVotesGebiet(ErgebnisExportObject ergebnisExportObject, ErgebnisExportContext context) {
        return ergebnisExportObject.getErgebnisDaten().getWurzelgebiet();
    }

    @Nullable
    @Override
    protected Wahldurchfuehrungsgebiet bestimmeGebietFuerDaten(ErgebnisExportObject ergebnisExportObject, ErgebnisExportContext context) {
        return ergebnisExportObject.getErgebnisDaten().getWurzelgebiet();
    }

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

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

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

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

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

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

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

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

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

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

    @Override
    public boolean isSignEml(Wahl wahl) {
        return true; // notwendig siehe https://support.elect-it.com/wiki/display/VAPP/EML-Import+validation
    }

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

        reportingUnitVotesWrapper.setId(
                getMessage("eml510c.reporting.unit.id", reportingUnitGebiet.getUebergeordnetesGebiet().getNummer(),
                        nlGebietDarstellungNummerFormatter.formatiereNummer(reportingUnitGebiet)));
    }

}
