package com.airlock.iam.plugin.configeditor.util;

import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.elog.api.LogTypes;
import com.vaadin.v7.ui.Upload.Receiver;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;

public class TempFileReceiver implements Receiver {
   private static final ELogger LOG = ELoggerFactory.getLogger(TempFileReceiver.class);
   private final String tempFilePrefix;
   private String fileMimeType;
   private String origFileName;
   private File target;

   public TempFileReceiver() {
      this("medusa-upload-");
   }

   public TempFileReceiver(String tempFilePrefix) {
      this.tempFilePrefix = tempFilePrefix;
   }

   public OutputStream receiveUpload(String filename, String mimeType) {
      this.origFileName = filename;
      this.fileMimeType = mimeType;

      try {
         this.target = File.createTempFile(this.tempFilePrefix, filename);
         this.target.deleteOnExit();
         return Files.newOutputStream(this.target.toPath());
      } catch (IOException e) {
         LOG.error(LogTypes.SERVER_INFO_SYS, "Upload failed: " + e.getMessage(), e);
         return null;
      }
   }

   public String getFileMimeType() {
      return this.fileMimeType;
   }

   public String getOrigFileName() {
      return this.origFileName;
   }

   public File getTempFile() {
      return this.target;
   }
}
