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

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

import de.ivu.elect.business.system.entity.VerzeichnisResult;
import de.ivu.elect.business.system.entity.VerzeichnisStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Verzeichnis implements Serializable {

  private static final long serialVersionUID = 1L;

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

  public VerzeichnisResult tryCreateDirectory(String directoryDisplayName, String directoryPathName) {

    VerzeichnisStatus verzeichnisStatus;

    LOG.info(directoryDisplayName + ": " + directoryPathName);

    try {
      File file = new File(directoryPathName);

      if (file.isDirectory()) {
        if (isDateienVorhanden(file)) {
          verzeichnisStatus = VerzeichnisStatus.BESTAND_BEREITS_MIT_VORHANDENEN_DATEIEN;
        } else {
          verzeichnisStatus = VerzeichnisStatus.BESTAND_BEREITS_OHNE_VORHANDENE_DATEIEN;
        }
      } else {
        file.mkdirs();
        if (file.isDirectory()) {
          verzeichnisStatus = VerzeichnisStatus.NEU_ANGELEGT;
        } else {
          LOG.warn(directoryDisplayName + " kann nicht angelegt werden, bitte korrigieren - Verzeichnis: '" + directoryPathName);
          verzeichnisStatus = VerzeichnisStatus.KANN_NICHT_ANGELEGT_WERDEN;
        }
      }
    } catch (Exception ex) {
      LOG.warn(directoryDisplayName + " kann nicht angelegt werden, bitte korrigieren - Verzeichnis: '" + directoryPathName + "', Fehler: " + ex.getMessage(), ex);

      verzeichnisStatus = VerzeichnisStatus.KANN_NICHT_ANGELEGT_WERDEN;
    }

    return new VerzeichnisResult(directoryPathName, verzeichnisStatus);
  }

  private boolean isDateienVorhanden(File file) {
    File[] files = file.listFiles();

    return files != null && files.length > 0;
  }
}
