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

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.konfiguration.entity.ElectKonfigurationWerte;
import de.ivu.elect.business.konfiguration.entity.Konfiguration;
import de.ivu.elect.business.konfiguration.entity.KonfigurationInitContext;
import de.ivu.elect.business.system.boundary.UserHome;
import de.ivu.elect.business.system.entity.VerzeichnisResult;
import de.ivu.elect.jee.cron.AbstractCronTimer;

public class AblageverzeichnisKonfigurationInit extends AbstractKonfigurationInit {

  private static final Logger LOG = LoggerFactory.getLogger(AblageverzeichnisKonfigurationInit.class);

  private static final String DIRECTORY_DISPLAY_NAME = "Verzeichnis für Dateiablage";

  public AblageverzeichnisKonfigurationInit() {
    super();
  }

  @Inject
  private transient UserHome userHome;

  @Override
  protected Collection<Konfiguration> createDefaultParameters(KonfigurationInitContext konfigurationInitContext) {
    VerzeichnisResult dateiablageDirectoryResult = tryCreateAblageVerzeichnis();

    // ELECT-7629
    LOG.info("Status vorgegebenes Ablageverzeichnis '" + dateiablageDirectoryResult.getVerzeichnisName() + "': " + dateiablageDirectoryResult.getVerzeichnisStatus());

    List<Konfiguration> result = new ArrayList<>();

    add(result, ElectKonfigurationWerte.ELECT_COMMON_DATEI_ABLAGE_VERZEICHNIS_PFAD, getVerzeichnisNameFuerDefaultKonfiguration(dateiablageDirectoryResult));
    add(result, ElectKonfigurationWerte.ELECT_COMMON_DATEI_CLEANUP_AKTIVIERT, Boolean.TRUE);
    add(result, ElectKonfigurationWerte.ELECT_COMMON_DATEI_CLEANUP_CRON_TIMER, getDefaultBereinigungCrontab());
    add(result, ElectKonfigurationWerte.ELECT_COMMON_DATEI_CLEANUP_MAX_EXPORT_COUNT, 5L /*ELECTKOM-698*/);
    add(result, ElectKonfigurationWerte.ELECT_COMMON_DATEI_CLEANUP_MAX_IMPORT_COUNT, 5L /*ELECTKOM-698*/ );
    add(result, ElectKonfigurationWerte.ELECT_COMMON_DATEI_CLEANUP_DAYS_IN_RECYCLE_BIN, 30L /*ELECT-9229*/ );
    add(result, ElectKonfigurationWerte.ELECT_COMMON_DATEI_CLEANUP_MS_BEFORE_RECYLE, 1_800_000 /*ELECTKOM-944 Halbe Stunde muss Datei mindestens existieren*/  );
    add(result, ElectKonfigurationWerte.ELECT_COMMON_TEMP_VERZEICHNIS_PFAD, userHome.getTempDir() );

    return result;
  }

  protected String getVerzeichnisNameFuerDefaultKonfiguration(VerzeichnisResult dateiablageDirectoryResult) {
    return dateiablageDirectoryResult.getVerzeichnisNameFuerDefaultKonfiguration();
  }

  protected String getDefaultBereinigungCrontab() {
    return AbstractCronTimer.MITTERNACHTS_DIENSTAG_BIS_SAMSTAG;
  }

  protected VerzeichnisResult tryCreateAblageVerzeichnis() {
    return tryCreateUserHomeDirectory(DIRECTORY_DISPLAY_NAME, getDateienVerzeichnisName());
  }

  protected String getDateienVerzeichnisName() {
    return "dateien";
  }
}
