import User from '#models/user'
import type { HttpContext } from '@adonisjs/core/http'
import vine, { SimpleMessagesProvider } from '@vinejs/vine'

const usernameSchema = vine.compile(
  vine.object({
    username: vine.string().maxLength(16).alphaNumeric(),
  })
)

usernameSchema.messagesProvider = new SimpleMessagesProvider({
  'username.maxLength': 'Username must be 16 characters or fewer.',
  'username.alphaNumeric': 'Username must contain only letters and numbers.',
})

export default class UsernameAvailabilityController {
  async show({ request, response }: HttpContext) {
    const { username } = await usernameSchema.validate({
      username: request.param('username'),
    })

    const existing = await User.query().where('username', username).first()

    return response.ok({ available: existing === null })
  }
}
