/**
 * Default model settings
 * (sails.config.models)
 *
 * Your default, project-wide model settings. Can also be overridden on a
 * per-model basis by setting a top-level properties in the model definition.
 *
 * For details about all available model settings, see:
 * https://sailsjs.com/config/models
 *
 * For more general background on Sails model settings, and how to configure
 * them on a project-wide or per-model basis, see:
 * https://sailsjs.com/docs/concepts/models-and-orm/model-settings
 */

module.exports.models = {
  /**
   *
   * Whether model methods like `.create()` and `.update()` should ignore
   * (and refuse to persist) unrecognized data-- i.e. properties other than
   * those explicitly defined by attributes in the model definition.
   *
   * To ease future maintenance of your code base, it is usually a good idea
   * to set this to `true`.
   *
   * > Note that `schema: false` is not supported by every database.
   * > For example, if you are using a SQL database, then relevant models
   * > are always effectively `schema: true`.  And if no `schema` setting is
   * > provided whatsoever, the behavior is left up to the database adapter.
   * >
   * > For more info, see:
   * > https://sailsjs.com/docs/concepts/orm/model-settings#?schema
   *
   */

  // schema: true,

  /**
   *
   * How and whether Sails will attempt to automatically rebuild the
   * tables/collections/etc. in your schema.
   *
   * > Note that, when running in a production environment, this will be
   * > automatically set to `migrate: 'safe'`, no matter what you configure
   * > here.  This is a failsafe to prevent Sails from accidentally running
   * > auto-migrations on your production database.
   * >
   * > For more info, see:
   * > https://sailsjs.com/docs/concepts/orm/model-settings#?migrate
   *
   */

  migrate: 'safe',

  /**
   *
   * Base attributes that are included in all of your models by default.
   * By convention, this is your primary key attribute (`id`), as well as two
   * other timestamp attributes for tracking when records were last created
   * or updated.
   *
   * > For more info, see:
   * > https://sailsjs.com/docs/concepts/orm/model-settings#?attributes
   *
   */

  attributes: {
    id: {
      type: 'string',
      autoIncrement: true,
    },
    createdAt: {
      type: 'ref',
      columnName: 'created_at',
    },
    updatedAt: {
      type: 'ref',
      columnName: 'updated_at',
    },
  },

  beforeCreate(valuesToSet, proceed) {
    valuesToSet.createdAt = new Date().toUTCString(); // eslint-disable-line no-param-reassign

    proceed();
  },

  beforeUpdate(valuesToSet, proceed) {
    valuesToSet.updatedAt = new Date().toUTCString(); // eslint-disable-line no-param-reassign

    proceed();
  },

  /**
   *
   * The set of DEKs (data encryption keys) for at-rest encryption.
   * i.e. when encrypting/decrypting data for attributes with `encrypt: true`.
   *
   * > The `default` DEK is used for all new encryptions, but multiple DEKs
   * > can be configured to allow for key rotation.  In production, be sure to
   * > manage these keys like you would any other sensitive credential.
   *
   * > For more info, see:
   * > https://sailsjs.com/docs/concepts/orm/model-settings#?dataEncryptionKeys
   *
   */

  dataEncryptionKeys: {
    default: 'fKSf/hPekelUegjM7IyM/EhHbd7HI9Kiec5Lxy2t+7w=',
  },

  /**
   *
   * Whether or not implicit records for associations should be cleaned up
   * automatically using the built-in polyfill.  This is especially useful
   * during development with sails-disk.
   *
   * Depending on which databases you're using, you may want to disable this
   * polyfill in your production environment.
   *
   * (For production configuration, see `config/env/production.js`.)
   *
   */

  // cascadeOnDestroy: true,
};
