"use strict";

var _path = _interopRequireDefault(require("path"));
var _lodash = _interopRequireDefault(require("lodash"));
var _index = _interopRequireDefault(require("./index"));
var _process = _interopRequireDefault(require("process"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const storage = {
  migration: 'sequelize',
  seeder: 'none'
};
const storageTableName = {
  migration: 'SequelizeMeta',
  seeder: 'SequelizeData'
};
const storageJsonName = {
  migration: 'sequelize-meta.json',
  seeder: 'sequelize-data.json'
};
let timestampsDefault = false;
module.exports = {
  getStorageOption(property, fallback) {
    return _index.default.config.readConfig()[property] || fallback;
  },
  getStorage(type) {
    return this.getStorageOption(type + 'Storage', storage[type]);
  },
  getStoragePath(type) {
    const fallbackPath = _path.default.join(_process.default.cwd(), storageJsonName[type]);
    return this.getStorageOption(type + 'StoragePath', fallbackPath);
  },
  getTableName(type) {
    return this.getStorageOption(type + 'StorageTableName', storageTableName[type]);
  },
  getSchema(type) {
    return this.getStorageOption(type + 'StorageTableSchema', undefined);
  },
  enableTimestamps() {
    timestampsDefault = true;
  },
  getTimestamps(type) {
    return this.getStorageOption(type + 'Timestamps', timestampsDefault);
  },
  getStorageOptions(type, extraOptions) {
    const options = {};
    if (this.getStorage(type) === 'json') {
      options.path = this.getStoragePath(type);
    } else if (this.getStorage(type) === 'sequelize') {
      options.tableName = this.getTableName(type);
      options.schema = this.getSchema(type);
      options.timestamps = this.getTimestamps(type);
    }
    _lodash.default.assign(options, extraOptions);
    return options;
  }
};