import router from '@adonisjs/core/services/router'
import { controllers } from '#generated/controllers'
import { throttleStrict, throttleSignup, throttleRefresh } from '#start/limiter'

// JWKS endpoint — used by API servers to fetch the public key for JWT verification
router.get('/.well-known/jwks.json', [controllers.Jwks, 'show'])

router
  .group(() => {
    router
      .group(() => {
        router
          .get('username/:username', [controllers.UsernameAvailability, 'show'])
          .use(throttleSignup)
        router.post('signup', [controllers.NewAccount, 'store']).use(throttleSignup)
        router.post('login', [controllers.AccessTokens, 'store']).use(throttleStrict)
        router.post('logout', [controllers.AccessTokens, 'destroy']).use(throttleRefresh)
        router.post('refresh', [controllers.RefreshTokens, 'store']).use(throttleRefresh)
        router.get('verify-email/:id', [controllers.EmailVerification, 'verify']).as('verify-email')
        router
          .post('password-reset/request', [controllers.PasswordReset, 'request'])
          .use(throttleSignup)
        router
          .post('password-reset/confirm', [controllers.PasswordReset, 'confirm'])
          .use(throttleStrict)
      })
      .prefix('auth')
      .as('auth')
  })
  .prefix('/api/v1')
