/*
|--------------------------------------------------------------------------
| Define HTTP limiters
|--------------------------------------------------------------------------
|
| The "limiter.define" method creates an HTTP middleware to apply rate
| limits on a route or a group of routes. Feel free to define as many
| throttle middleware as needed.
|
*/

import app from '@adonisjs/core/services/app'
import limiter from '@adonisjs/limiter/services/main'

const isDev = app.inDev

/** 10 attempts per 15 minutes — login & password reset confirm */
export const throttleStrict = limiter.define('strict', (ctx) => {
  if (isDev) return limiter.allowRequests(1_000_000).every('1 minute').usingKey('dev')
  return limiter.allowRequests(10).every('15 minutes').usingKey(`strict:${ctx.request.ip()}`)
})

/** 5 attempts per hour — signup & password reset request */
export const throttleSignup = limiter.define('signup', (ctx) => {
  if (isDev) return limiter.allowRequests(1_000_000).every('1 minute').usingKey('dev')
  return limiter.allowRequests(5).every('1 hour').usingKey(`signup:${ctx.request.ip()}`)
})

/** 30 attempts per 15 minutes — token refresh */
export const throttleRefresh = limiter.define('refresh', (ctx) => {
  if (isDev) return limiter.allowRequests(1_000_000).every('1 minute').usingKey('dev')
  return limiter.allowRequests(30).every('15 minutes').usingKey(`refresh:${ctx.request.ip()}`)
})
