package de.ivu.elect.business.datei.control;

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

import javax.annotation.Nullable;

import de.ivu.elect.business.datei.entity.Datei;
import de.ivu.elect.business.datei.entity.ServerFileType;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class FileExchangeDirectory implements Serializable {

  private static final String WAHL_SUBDIR = "wahl_";

  private static final String WAHLTERMIN_SUBDIR = "wahltermin_";

  private static final long serialVersionUID = 1L;

  public String erstellePfad(Datei datei, ServerFileType serverFileType) {
    return erstellePfad(datei.getWahltermin(), datei.getWahl(), serverFileType);
  }

  public String erstellePfad(@Nullable Wahltermin wahltermin, @Nullable Wahl wahl, ServerFileType serverFileType) {
    return getWahlterminWahlPfad(wahltermin, wahl) + serverFileType.getPath();
  }

  private String getWahlterminWahlPfad(@Nullable Wahltermin wahltermin, @Nullable Wahl wahl) {
    StringBuilder result = new StringBuilder();
    Wahltermin wahlterminUse = wahltermin;
    if (wahlterminUse == null && wahl != null) {
      wahlterminUse = wahl.getWahltermin();
    }

    if (wahlterminUse == null) {
      result.append("-");
    } else {
      result.append(getWahlterminSubdir());
      result.append(wahlterminUse.getId());
      if (wahl != null) {
        result.append(File.separator);
        result.append(getWahlSubdir());
        result.append(wahl.getId());
      }
    }
    if (result.length() == 0) {
      return "";
    }
    return result + File.separator;
  }

  protected String getWahlSubdir() {
    return WAHL_SUBDIR;
  }

  protected String getWahlterminSubdir() {
    return WAHLTERMIN_SUBDIR;
  }

}
