
package de.ivu.elect.business.wahl.boundary;

import static org.apache.commons.lang3.StringUtils.defaultIfBlank;

import java.io.File;
import java.io.Serializable;

import de.ivu.elect.business.datei.entity.AbstractDateiFileNames;
import de.ivu.elect.business.datei.entity.DateiExport;
import de.ivu.elect.business.datei.entity.DateiFileNames;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.exchange.entity.DateiExportArt;
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 NlExportArtefaktNachSystemExportstatus implements Serializable {

  private static final long serialVersionUID = 1L;

  private final FileFormat fileFormat;

  private final String originalDateiname;

  private final String dateiname;

  private final File file;

  public NlExportArtefaktNachSystemExportstatus(FileFormat fileFormat, DateiExport dateiExport) {
    this(fileFormat, dateiExport.getDatei() != null ? dateiExport.getDatei().getOriginalDateiname() : "", dateiExport.getDatei() != null ? dateiExport.getDatei().getDateiname() : "", null);
  }

  public NlExportArtefaktNachSystemExportstatus(FileFormat fileFormat, String fileName, File file) {
    this(fileFormat, fileName, "", file);
  }

  private NlExportArtefaktNachSystemExportstatus(FileFormat fileFormat, String originalDateiname, String dateiname, File file) {
    super();

    this.fileFormat = fileFormat;

    this.originalDateiname = originalDateiname;
    this.dateiname = dateiname;

    this.file = file;
  }

  public boolean isPersistent() {
    return getFile() == null;
  }

  public FileFormat getFileFormat() {
    return fileFormat;
  }

  public String getOriginalDateiname() {
    return originalDateiname;
  }

  public File getFile() {
    return file;
  }

  public DateiFileNames getDateiFileNames(Messages messages, DateiExportArt dateiExportArt) {
    return new AbstractDateiFileNames(messages) {

      @Override
      public String getOriginalDateiname(FileFormat fileFormat, Wahl wahl, Wahltermin wahltermin) {
        return NlExportArtefaktNachSystemExportstatus.this.getOriginalDateiname();
      }

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