# Source: lib/init/folderStructure.js

    'use strict';
    const path = require('path');
    const fs = require('fs-extra');
    const __STRUCTURE_DIR = path.resolve(__dirname, '../../__STRUCTURE');
    const clusterModule = require('cluster');

    /**
     * this will setup a periodic application folder structure if one doesnt exist, it will not overwrite existing configs
     *
     * @returns Promise setUpFolderStructure will copy folders from the application __STRUCTURE directory to initialize the application
     */
    function setUpFolderStructure() {
      const cluster = this.cluster || clusterModule;
      return new Promise((resolve, reject) => {
        try {
          if (cluster.isMaster===false) {
            return resolve(true);
          } else {
            fs.copy(__STRUCTURE_DIR, this.config.app_root, {
              overwrite: false,
              clobber: false,
              preserveTimestamps: true,
            })
              .then(() => { //check to make sure there arent two config files (both a json and a js file, if there are both, use the json file)
                return Promise.all([
                  fs.copy(path.join(__STRUCTURE_DIR, 'public'), path.join(this.config.app_root, 'public'), {
                    overwrite: true,
                    clobber: true,
                    preserveTimestamps: true,
                    filter: (src, dest) => {
                      return src.indexOf('favicon') === -1;
                    },
                  }),
                  fs.copy(path.join(__STRUCTURE_DIR, 'app'), path.join(this.config.app_root, 'app'), {
                    overwrite: true,
                    clobber: true,
                    preserveTimestamps: true,
                  }),
                ]);
              })
              .then(() => { //check to make sure there arent two config files (both a json and a js file, if there are both, use the json file)
                return fs.readdir(path.join(this.config.app_root, 'content/config'));
              })
              .then(configFiles => {
                if (configFiles.indexOf('config.json') !== -1 && configFiles.indexOf('config.js') !== -1) {
                  resolve(fs.remove(path.join(this.config.app_root, 'content/config/config.js')));
                } else {
                  resolve(true);
                }
              })
              .catch(reject);
          }
        } catch (e) {
          reject(e);
        }
      });
    }
    module.exports = setUpFolderStructure;