import * as CloudExplorer from 'cloud-explorer';
import * as Os from 'os';
import {CeOptions} from '../ServerConfig';

export default function(ceOptions: CeOptions) {

  const routerOptions: any = {};

  // FTP service
  if (ceOptions.enableFtp) {
    console.log('> FTP service enabled');
    routerOptions.ftp = {
      redirectUri: ceOptions.rootUrl + '/ftp/signin',
    };
  } else {
    console.log('> FTP service disabled, env vars ENABLE_FTP not set');
  }

  // SFTP service
  if (ceOptions.enableSftp) {
    console.log('> SFTP service enabled');
    routerOptions.sftp = {
      redirectUri: ceOptions.rootUrl + '/sftp/signin',
    };
  } else {
    console.log('> SFTP service disabled, env vars ENABLE_SFTP not set');
  }

  // Webdav service
  if (ceOptions.enableWebdav) {
    console.log('> Webdav service enabled');
    routerOptions.webdav = {
      redirectUri: ceOptions.rootUrl + '/webdav/signin',
    };
  } else {
    console.log('> Webdav service disabled, env vars ENABLE_WEBDAV not set');
  }

  // Github service
  if (ceOptions.githubClientId && ceOptions.githubClientSecret) {
    console.log('> Github service enabled', ceOptions.githubClientId);
    routerOptions.github = {
      clientId: ceOptions.githubClientId,
      clientSecret: ceOptions.githubClientSecret,
      redirectUri: ceOptions.rootUrl + '/github/oauth_callback',
    };
  } else {
    console.log('> Github service disabled, env vars GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET not set');
  }

  // Dropbox service
  if (ceOptions.dropboxClientId && ceOptions.dropboxClientSecret) {
    console.log('> Dropbox service enabled', ceOptions.dropboxClientId);
    routerOptions.dropbox = {
      clientId: ceOptions.dropboxClientId,
      clientSecret: ceOptions.dropboxClientSecret,
      redirectUri: ceOptions.rootUrl + '/dropbox/oauth_callback',
    };
  } else {
    console.log('> Dropbox service disabled, env vars DROPBOX_CLIENT_ID and DROPBOX_CLIENT_SECRET not set');
  }

  // Local file system service
  if (ceOptions.enableFs) {
    const fsRoot = ceOptions.fsRoot || Os.homedir();
    console.log('> Local file system service enabled');
    console.warn('Warning local file system is writable, use FS_ROOT as root (', fsRoot, ')');
    routerOptions.fs = {
      showHiddenFile: false,
      sandbox: fsRoot,
      infos: {
        displayName: 'fs',
      },
    };
  } else {
    console.log('> Local file system service disabled, env vars SILEX_ELECTRON or SILEX_DEBUG or ENABLE_FS not set');
  }

  return new CloudExplorer(routerOptions);
}
