
package de.ivu.elect.business.exchange.entity;

import de.ivu.elect.business.datei.entity.AbstractDateiFileNames;
import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.business.exchange.control.FileFormat;
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 DateiExportArtFileNames extends AbstractDateiFileNames {

  private final DateiExportArt dateiExportArt;

  public DateiExportArtFileNames(Messages messages, DateiExportArt dateiExportArt) {
    super(messages);

    this.dateiExportArt = dateiExportArt;
  }

  @Override
  public String getOriginalDateiname(FileFormat fileFormat, Wahl wahl, Wahltermin wahltermin) {
    FileType fileType = fileFormat.getFileType();

    if (DateiExportArt.WAHL_FUER_WES_EXPORT.equals(dateiExportArt)) { // ELECT-9131
      String msgKey = null;

      if (fileType.isZipFile()) {
        msgKey = "wahl.fuer.wes.export.datei.name.zip";
      }

      if (fileType.isExeFile()) {
        msgKey = "wahl.fuer.wes.export.datei.name.exe";
      }

      if (existsMessageKey(msgKey)) {
        return normalize(getMessage(msgKey) + DELIMITER + getCurrentDateFormatted(DATE_PATTERN_EXTERN), true, fileType);
      }
    }

    String simpleFileName = getMessage("app.name");

    simpleFileName += DELIMITER;
    simpleFileName += getMessage(dateiExportArt);

    if (wahl == null) {
      if (wahltermin != null) {
        simpleFileName += DELIMITER;
        simpleFileName += wahltermin.getName();
      }
    } else {
      simpleFileName += DELIMITER;
      simpleFileName += wahl.getName();
    }

    String fileFormatNameMsgKey = fileFormat.getName();

    if (existsMessageKey(fileFormatNameMsgKey)) {
      simpleFileName += DELIMITER;
      simpleFileName += getMessage(fileFormatNameMsgKey);
    }

    simpleFileName += DELIMITER;
    simpleFileName += getCurrentDateFormatted(DATE_PATTERN_EXTERN);

    return normalize(simpleFileName, false, fileType);
  }

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