package de.ivu.elect.exchange.wahl;

import de.ivu.elect.business.konfiguration.entity.CustomParameter;
import de.ivu.elect.business.konfiguration.entity.ElectKonfigurationWerte;
import de.ivu.elect.business.konfiguration.entity.KonfigurationLoader;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.wahl.entity.WahlPK;
import de.ivu.elect.business.wahl.entity.WahlterminPK;
import org.apache.commons.lang3.StringUtils;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.inject.Inject;
import java.io.File;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.List;

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class SystemWahlterminExportTransaktion implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient KonfigurationLoader konfigurationLoader;

  public SystemWahlterminExportKonfiguration ladeKonfiguration() {

    String pathAsString = konfigurationLoader.resolveStringValue(ElectKonfigurationWerte.WAHLEXPORT_PFAD);
    String wahldatumAsString = konfigurationLoader.resolveStringValue(ElectKonfigurationWerte.WAHLEXPORT_DATUM);

    File path = null;
    if (StringUtils.isNotBlank(pathAsString)) {
      path = new File(pathAsString);
    }

    boolean aktiviert = konfigurationLoader.resolveBooleanValue(ElectKonfigurationWerte.WAHLEXPORT_AKTIVIERT);

    return new SystemWahlterminExportKonfiguration(aktiviert, path, CustomParameter.parseDate(wahldatumAsString));
  }

  public List<WahlterminPK> bestimmeZuExportierendeWahltermine(SystemWahlterminExportKonfiguration systemWahlterminExportKonfiguration) {
    return Collections.emptyList();
  }

  public List<WahlPK> bestimmeZuExportierendeWahlen(SystemWahlterminExportKonfiguration systemWahlterminExportKonfiguration) {
    return Collections.emptyList();
  }


  public void exportiere(WahlterminPK wahlterminPK, SystemWahlterminExportKonfiguration systemWahlterminExportKonfiguration) {
    // nichts zu tun
  }

  public void exportiere(WahlPK wahlPK, SystemWahlterminExportKonfiguration systemWahlterminExportKonfiguration) {
    // nichts zu tun
  }


  protected File bestimmeZielVerzeichnis(Mandant mandant, SystemWahlterminExportKonfiguration systemWahlterminExportKonfiguration) {
    File verzeichnis = systemWahlterminExportKonfiguration.getPath();
    File verzeichnisMitDatum = new File(verzeichnis, new SimpleDateFormat("yyyyMMdd").format(systemWahlterminExportKonfiguration.getWahldatum()));
    File verzeichnisMitDatumMandant = new File(verzeichnisMitDatum, Long.toString(mandant.getNummer()));
    verzeichnisMitDatumMandant.mkdirs();
    return verzeichnisMitDatumMandant;
  }

}
