const { merge } = require('@overleaf/settings/merge')
const baseApp = require('../../../config/settings.overrides.saas')
const baseTest = require('./settings.test.defaults')

const httpAuthUser = 'overleaf'
const httpAuthPass = 'password'
const httpAuthUsers = {}
httpAuthUsers[httpAuthUser] = httpAuthPass

const overleafHost =
  process.env.V2_URL ||
  `http://${process.env.HTTP_TEST_HOST || '127.0.0.1'}:23000`

const overrides = {
  appName: 'Overleaf',
  siteUrl: overleafHost,

  enableSubscriptions: true,

  apis: {
    thirdPartyDataStore: {
      url: `http://127.0.0.1:23002`,
      dropboxApp: 'Overleaf',
    },
    analytics: {
      url: `http://127.0.0.1:23050`,
    },
    recurly: {
      url: 'http://127.0.0.1:26034',
      subdomain: 'test',
      apiKey: 'private-nonsense',
      webhookUser: 'recurly',
      webhookPass: 'webhook',
    },

    v1: {
      url: `http://127.0.0.1:25000`,
      user: 'overleaf',
      pass: 'password',
    },
    tags: {
      url: 'http://127.0.0.1:25000',
    },
  },

  oauthProviders: {
    provider: {
      name: 'provider',
    },
    collabratec: {
      name: 'collabratec',
    },
    google: {
      name: 'google',
    },
  },

  saml: undefined,

  contentful: {
    spaceId: 'a',
    deliveryToken: 'b',
    previewToken: 'c',
    deliveryApiHost: 'cdn.contentful.com',
    previewApiHost: 'preview.contentful.com',
  },

  twoFactorAuthentication: {
    accessTokenEncryptorOptions: {
      cipherPasswords: {
        '2023.1-v3': 'this-is-a-weak-secret-for-tests-web-2023.1-v3',
      },
    },
  },

  overleaf: {
    host: 'http://127.0.0.1:25000',
    oauth: {
      clientID: 'mock-oauth-client-id',
      clientSecret: 'mock-oauth-client-secret',
    },
  },

  analytics: {
    enabled: true,
    hashedEmailSalt: 'acceptance-test-salt',
  },
}

module.exports = baseApp.mergeWith(baseTest.mergeWith(overrides))

for (const redisKey of Object.keys(module.exports.redis)) {
  module.exports.redis[redisKey].host = process.env.REDIS_HOST || '127.0.0.1'
}

module.exports.mergeWith = function (overrides) {
  return merge(overrides, module.exports)
}
