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

import de.ivu.elect.NlExportFileNames;
import de.ivu.elect.business.datei.entity.AbstractDateiFileNames;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.exchange.entity.DateiExportArt;
import de.ivu.elect.business.gebietsbaum.boundary.AbstractGebietDAO;
import de.ivu.elect.business.gebietsbaum.control.EntityMitWurzelgebietDAO;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.NlGebietsart;
import de.ivu.elect.business.security.Customer;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.jee.faces.Messages;

public class Osv43ErgebnisCsvExportFileNames extends AbstractDateiFileNames {

  private final DateiExportArt dateiExportArt;

  private final boolean dateiExportConcept;

  private final Customer customer;

  private final AbstractGebietDAO gebietDAO;

  public Osv43ErgebnisCsvExportFileNames(Messages messages, DateiExportArt dateiExportArt, boolean dateiExportConcept, Customer customer, AbstractGebietDAO gebietDAO) {
    super(messages);

    this.dateiExportArt = dateiExportArt;

    this.dateiExportConcept = dateiExportConcept; // ELECTVAPP-1411

    this.customer = customer;

    this.gebietDAO = gebietDAO;
  }

  @Override
  public String getOriginalDateiname(FileFormat fileFormat, Wahl wahl, Wahltermin wahltermin) {
    String wahlartKennzeichen = wahl.getWahlart().getKennzeichen();
    String wahljahr = String.valueOf(wahl.getWahljahr()); // NICHT als Zahl formatieren...

    Gebiet wurzelgebiet = wahl.getWurzelgebiet(EntityMitWurzelgebietDAO.fromDao(gebietDAO));
    String wurzelgebietName = wurzelgebiet.getName();

    String fileNameInfixConcept = dateiExportConcept ? "-" + getMessage("concept.export.file.name.infix") : "";
    String fileExtension = fileFormat.getFileType().getFileExtension();

    String msgKey = "file.format.ergebnisdokument.export.osv43.main.file.name.format";

    if (NlWahlart.TWEEDE_KAMER.equalsWahlart(wahl)) {
      if (NlWahlart.isWasHSB(wahl, customer)) {
        msgKey += ".kieskring";
      } else if (NlWahlart.isWasPSB(wahl, customer)) {
        if (NlGebietsart.OPENBAAR_LICHAAM.equals(NlExportFileNames.getRegionType(wurzelgebiet))) {
          msgKey += ".openbaar.lichaam";
        } else {
          msgKey += ".gemeente";
        }
      } else {
        msgKey += ".totaal";
      }
    }

    return getMessage(msgKey, wahlartKennzeichen, wahljahr, wurzelgebietName, fileNameInfixConcept) + "." + fileExtension;
  }

  @Override
  public String getDateiname(FileFormat fileFormat, Wahl wahl, Wahltermin wahltermin) {
    return generateDateiname(fileFormat, dateiExportArt, true);
  }
}
