import * as Joi from 'joi';

export const environmentValidationSchema = Joi.object({
  NODE_ENV: Joi.string().valid('development', 'test', 'production').default('development'),
  HOST: Joi.string().default('127.0.0.1'),
  PORT: Joi.number().port().default(4000),
  APP_ORIGIN: Joi.string().required(),

  DATABASE_URL: Joi.string()
    .uri({ scheme: ['postgres', 'postgresql'] })
    .required(),
  DATABASE_SSL: Joi.boolean().truthy('true').falsy('false').default(false),
  DATABASE_SSL_REJECT_UNAUTHORIZED: Joi.boolean().truthy('true').falsy('false').default(true),
  DATABASE_POOL_MAX: Joi.number().integer().min(1).max(100).default(10),

  AUTH_ALLOW_REGISTRATION: Joi.boolean().truthy('true').falsy('false').default(false),
  SESSION_COOKIE_NAME: Joi.string()
    .pattern(/^[a-zA-Z0-9_-]+$/)
    .default('ck_session'),
  SESSION_TTL_DAYS: Joi.number().integer().min(1).max(365).default(30),

  SWAGGER_ENABLED: Joi.boolean().truthy('true').falsy('false').default(false),
  RATE_LIMIT_MAX: Joi.number().integer().min(1).default(200),
  RATE_LIMIT_WINDOW_MS: Joi.number().integer().min(1000).default(60_000),
  LOG_LEVEL: Joi.string()
    .valid('fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent')
    .default('info'),
});
